代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
@param nums int整型一维数组
@param target int整型
@return int整型
#双指针限定滑窗范围,范围内的值之和作为约束条件,比较滑窗长短来最后判断输出
#这也是其他大佬们的手法,我写出来只是照搬且易懂而已
class Solution:
def minSubarray(self , nums: List[int], target: int) -> int:
# write code here
#左右指针移动滑窗求长度
left = 0 #左指针
right = 0 #右指针
sums = 0 #左右指针滑窗内部的值之和
ans = len(nums) #这个是用来比较滑窗内长短的值,可以设为无限大,这里我设为nums长度
while right < len(nums): #右指针先走,走完整个nums
while right < len(nums) and sums < target:
#这里再次限定了右指针行动范围,同时讨论sums没有大于target的情况
#这种时候就要把右指针右移,扩大标定范围,同时将sums加上右移添加的值
sums += nums[right]
right += 1
while left <right and sums >= target:
#这里则是使得保证左指针小于右指针,且当sums是大于等于target时的情况
#这种情况是满足要求的,但是需要比较所含范围的长短
ans = min(ans,right-left) #比较长短,最后就已经可以得到ans
sums -= nums[left] #如果长了就右移左指针,减去值
left += 1
return ans