defminSubArrayLen(target, nums):"""
:type target: int
:type nums: List[int]
:rtype: int
"""
n =len(nums)# l表示左窗口的位置,r表示右窗口的位置
l = r =0# sum表示窗口内的元素总值sum= nums[0]# 如果第一个元素的值就大于等于target,直接返回ifsum>= target:return1# 设置成100001是因为测试用例的数组长度最长为100000
min_length =100001# 循环n - 1次for i inrange(1, n):# 右窗口肯定是要一直移动的,不存在每次循环不移动的情况
r +=1sum+= nums[r]# 如果sum去掉靠近左窗口的那个元素后仍然大于sum,就该减小窗口的长度了whilesum- nums[l]>= target:sum-= nums[l]
l +=1# 经过上述步骤后,当来到右窗口此时的位置时,满足条件的窗口长度就得到了ifsum>= target:
min_length =min(min_length, r - l +1)# 数组所有元素的总和加起来都小于target,min_length就返回0return0if min_length ==100001else min_length
精简版
defminSubArrayLen(target, nums):"""
:type target: int
:type nums: List[int]
:rtype: int
"""
n =len(nums)
l = r =0
min_length =100001sum=0while r < n:sum+= nums[r]whilesum- nums[l]>= target