class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
l = 0
sub_sum = 0
res = float('inf')
for r in range(len(nums)):
sub_sum += nums[r]
while sub_sum >= target:
res = min(res, r - l + 1)
sub_sum -= nums[l]
l += 1
return res if res != float('inf') else 0
滑动窗口
窗口内是什么?如何移动窗口的起始位置?如何移动窗口的结束位置?
# 左闭右闭,本质上只有一次循环,时间复杂度为O(1)
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
res = float('inf')
l = 0
r = 0
sum_lr = nums[0]
while l <= r and r < len(nums):
if sum_lr < target:
r += 1
if r <= len(nums) - 1:
sum_lr += nums[r]
else:
res = min(res, r - l +1)
sum_lr -= nums[l]
l += 1
return res if res != float('inf') else 0