给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
image.png
解题思路:
- 双指针,滑动窗口;
- 初始化快慢指针同时指向
index=0
,终止条件快指针到数组最后一位; - 当窗口内数字和小于s时,快指针前进,直至数字和大于s,记录此时窗口大小,此时满指针前进,直至窗口内数字和小于s;
- 重复步骤3,直至快指针指向终点,且窗口内数字全部弹出,慢指针也指向终点。
Python3代码:
class Solution:
def minSubArrayLen(self, s: int, nums: List[int]) -> int:
n = len(nums)
slow = fast = 0
min_len=1e9
ans = 0
while fast < n:
ans += nums[fast]
fast+=1
while ans>=s:
min_len = min(fast-slow, min_len)
ans-=nums[slow]
slow+=1
return 0 if min_len == 1e9 else min_len
网友评论