长度最小的子数组

力扣刷题-长度最小的子数组

题目描述

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

  • 示例1
1
2
3
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
  • 示例2
1
2
输入:target = 4, nums = [1,4,4]
输出:1
  • 示例3
1
2
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
  • 提示
1
2
3
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        l = len(nums)
        left = 0 
        flag = True
        minlen = 1e5+1
        sum = 0
        for i in range(0,l):
            sum += nums[i]

            while sum >= target:
                flag = False
                sum = sum - nums[left]
                minlen = min(minlen,i-left+1)
                left+=1
        if flag:
            return 0
        return  minlen