给定一个含有 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 <= 10^9
  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^5

进阶:
如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

Python 解答:
1.滑动窗口

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        i, j = 0, 0
        dp = [100001 for i in range(len(nums))]
        temp = 0

        while i < len(nums):
            while  j < len(nums) and temp < target:
                temp += nums[j]
                j += 1

            if temp < target:
                break
            dp[i] = j-i
            temp -= nums[i]
            i += 1
        length = min(dp)
        if length != 100001:
            return length
        else: return 0
最后修改日期: 2021年8月26日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。