当前位置: 首页> 汽车> 时评 > 【LeetCode】【209】长度最小的子数组(1488字)

【LeetCode】【209】长度最小的子数组(1488字)

时间:2025/7/13 11:50:04来源:https://blog.csdn.net/from__2024_04_11/article/details/139067180 浏览次数: 0次

文章目录

    • @[toc]
      • 题目描述
      • 样例输入输出与解释
        • 样例1
        • 样例2
        • 样例3
      • 提示
      • 进阶
      • Python实现
        • 前缀和+二分查找
        • 滑动窗口

因上努力

个人主页:丷从心·

系列专栏:LeetCode

刷题指南:LeetCode刷题指南

果上随缘


题目描述

  • 给定一个含有n个正整数的数组和一个正整数target
  • 找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl, numsl+1, ..., numsr-1, numsr],并返回其长度
  • 如果不存在符合条件的子数组,返回0

样例输入输出与解释

样例1
  • 输入:target = 7nums = [2,3,1,2,4,3]
  • 输出:2
  • 解释:子数组[4,3]是该条件下的长度最小的子数组
样例2
  • 输入:target = 4nums = [1,4,4]
  • 输出:1
样例3
  • 输入:target = 11nums = [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(nlog(n))时间复杂度的解法

Python实现

前缀和+二分查找
class Solution:def minSubArrayLen(self, s: int, nums: List[int]) -> int:n = len(nums)res = n + 1sums = [0]for i in range(n):sums.append(sums[-1] + nums[i])for i in range(1, n + 1):target = sums[i - 1] + sbound = bisect.bisect_left(sums, target)if bound != len(sums):res = min(res, bound - (i - 1))return res if res != n + 1 else 0
滑动窗口
class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:n = len(nums)res, sum = n + 1, 0start, end = 0, 0while end < n:sum += nums[end]while sum >= target:res = min(res, end - start + 1)sum -= nums[start]start += 1end += 1return res if res != n + 1 else 0

关键字:【LeetCode】【209】长度最小的子数组(1488字)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: