逐渐开始补上之前没刷的题目吧....
数组
977. 有序数组平方 🔗
初看觉得挺简单的,就是平方一下然后sort就可以了。但是后面看到有双指针的做法,觉得挺奇妙的,因为原先数组是排序的,但是因为平方后大小不一定按照原先排序(有负数),所以在使用双指针处理的时候需要注意。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l, r, i = 0, len(nums) - 1, len(nums) - 1
res = [0] * len(nums) # 需要提前定义列表,存放结果
while l <= r:
if nums[l] ** 2 < nums[r] ** 2:
res[i] = nums[r] ** 2
r -= 1
else:
res[i] = nums[l] ** 2
l += 1
i -= 1
return res
209.长度最小的子数组 🔗
暴力解法两个 for loop 很简单,但是超时间限制了。可以使用双指针/滑动窗口的思路来写。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
l, r = 0, 0
cur = 0
min_len = float('inf') # 需要定义一个最大的值,方便后续比较
while r < len(nums):
cur += nums[r]
while cur >= target:
min_len = min(min_len, r - l + 1) # 更新 min length 长度
cur -= nums[l]
l += 1
r += 1
if min_len == float('inf'):
return 0
else:
return min_len