思路:
滑动窗口:时间复杂度O(n),空间复杂度O(1)
类似双指针,不断调节子序列起始位置、结束位置,从而得到想要的结果
1)窗口是什么?
-满足其和>=target的长度最小的连续数组
2)如何移动子序列的起始位置?
-从最左边开始,当子序列的和>=target时,子序列的和减去当前起始值,接着起始位置右移一位
3)如何移动子序列的终点位置?
-从最左开始,遍历数组到尾
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
#定义无穷大数
res=float('inf')
sum=0
left=0
for right in range(len(nums)):
sum+=nums[right]
while sum>=target:
#取最小长度
res=min(res,right-left+1)
sum-=nums[left]
left+=1
#若res还是最大值,表示没有长度最小的连续子数组,返回0,否则返回更新后的res
return 0 if res==float('inf') else res