滑动窗口
算法过程
- left, right分别指向窗口的左右指针
- 变量total指当前窗口内元素之和
- ans指窗口的长度,因为后序会用min来筛选,所以默认值为数组的长度
- 遍历数组,将每个元素与total相加,当total大于等于target时,更新ans并且total减去窗口的第一个元素
nums[left]
,最后调整窗口将left向右移。 - 窗口往右扩展
right+=1
代码
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
n = len(nums)
left, right = 0, 0
total = 0
ans = n + 1
while right < n:
total += nums[right]
while total >= target:
ans = min(ans, right - left + 1)
total -= nums[left]
left += 1
right += 1
return 0 if ans == n + 1 else ans