这一题使用了双指针的滑动窗口方法
两层循环,但时间复杂度为O(n)
,左右两个指针最多均只滑动一边,目的是找到刚好满足条件的最短区间。
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
left = 0
s = 0
min_len = len(nums)
# 右指针向前移动
for right in range(len(nums)):
# 窗口内值增加右指针处数
s += nums[right]
while s >= target:
# 窗口内值减去左指针处数
s -= nums[left]
# 更新最小长度
min_len = min(right-left+1, min_len)
# 左指针向前移动
left += 1
if left == 0:
return 0
return min_len