题目:给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
题目分析:采用的滑动窗口,及快慢指针的方法
先不断累加,如果大于目标值时,移动慢指针,减少值看是否还能大于目标值,依次比较,每次将最短的存下,最终输出最短的值。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
#快慢指针,滑动窗口
start,end=0,0
total=0
n=len(nums)
ans=n+1
while end<n:
total+=nums[end]
while total>=target:
ans=min(ans,end-start+1)
total-=nums[start]
start+=1
end+=1
return 0 if ans==n+1 else ans