给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组。[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
输入:target = 4, nums = [1,4,4]
输出:1
分析:本题可以采用滑动窗口的思想,设置一个头指针和一个尾指针,不断移动尾指针,直到满足和大于target时候,就计算长度,然后再往前移动头指针,再判断是否满足大于target,再计算长度,直到小于target此时再移动尾指针。直到遍历完尾指针。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
results = len(nums)
j = 0 # 尾指针
i = 0 # 头指针
sum1 = 0
for j in range(len(nums)):
sum1 = sum1 + nums[j] #移动尾指针直到其值大于target
while(sum1 >= target):
len11 = j-i+1
results = min(results,len11) # 保存长度最小的值
sum1 = sum1-nums[i]
i = i+1 # 移动头指针
if(sum(nums) < target) : return 0
return results