前往此题

滑动窗口

算法过程

  1. left, right分别指向窗口的左右指针
  2. 变量total指当前窗口内元素之和
  3. ans指窗口的长度,因为后序会用min来筛选,所以默认值为数组的长度
  4. 遍历数组,将每个元素与total相加,当total大于等于target时,更新ans并且total减去窗口的第一个元素nums[left],最后调整窗口将left向右移。
  5. 窗口往右扩展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