LC209 长度最小的子数组

209 长度最小的子数组


1 题目

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

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

提示:

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 104

2 解答

  1. 利用下一步是否需要收缩为条件
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:

        n = len(nums)
        left = 0
        ans = inf
        sum = 0

        for right , val in enumerate(nums):
            sum+=val
            while sum - nums[left] >= target:
                sum = sum - nums[left]
                left += 1

            if sum >= target:
                ans = min(ans , right-left+1)

        if ans <=n:
            return ans
        else:
            return 0
  1. 利用题目要求$sum \ge target $为条件
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:

        n = len(nums)
        left = 0
        ans = inf
        sum = 0

        for right , val in enumerate(nums):
            sum+=val

             while sum>=target:
                 ans = min(ans ,  right - left + 1)
                 sum = sum -nums[left]
                 left += 1
                
        if ans <=n:
            return ans
        else:
            return 0
posted @ 2025-08-26 22:56  AxonoSensei  阅读(6)  评论(0)    收藏  举报