参考官方解法中的双指针
起初 start 和 end都在索引为0的位置
并用一个变量记录此时的和
期初和为0
用一个全局变量记录最小长度
当end<length时 外部循环
将和加上end位置的数
若此时的和 大于等于s 内嵌循环
先计算此时的子数组长度end - start + 1是否比当前最小长度小
则将和减去start位置的值
然后将start前移start += 1
当和不再大于等于s时
将end+= 1
最后返回最小长度
class Solution:
def minSubArrayLen(self, s: int, nums: List[int]) -> int:
start = 0
end = 0
length = len(nums)
if length == 0:
return 0
if length == 1:
return 1 if nums[0] >= s else 0
start = 0
end = 0
cur_sum = 0#nums[start]# + nums[end]
minlength = length + 1
while end < length:
cur_sum += nums[end]
while cur_sum >= s:
minlength = min(minlength,end - start + 1)
cur_sum -= nums[start]
start += 1
end += 1
return 0 if minlength == length + 1 else minlength