当前位置: 首页 > ai >正文

LeetCode 分类刷题:209. 长度最小的子数组

题目

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

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [nums(l), nums(l+1), ..., nums(r-1), nums(r)] ,并返回其长度如果不存在符合条件的子数组,返回 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

解析

采用滑动窗口的方法,连续子数组可以表示为 [nums(left)......nums(right)],即从第 left 项到第 right 项。

  • 当下标为[left...right] 的子数组和 >= target,如果此时扩张窗口,>= target的条件依然满足(因为是数组和target都是正整数),但背离“最小长度”的要求。
    • 所以选择收缩窗口:当下标为[left...right] 的子数组和 >= target时,left 继续右移,并更新最小长度,直到不再满足>= target的条件。
  • 当窗口[left...right]的子数组和 < target时,right 右移,扩大窗口,更新子数组和,直到条件重新满足。

总结
扩张窗口:为了找到一个可行解,找到了就不再扩张,因为扩张不再有意义。
收缩窗口:在长度上优化该可行解,直到条件被破坏。
继续寻找下一个可行解,然后再优化到不能优化……

作者:笨猪爆破组
链接:https://leetcode.cn/problems/minimum-size-subarray-sum/solutions/306148/jin-tian-mei-tu-yi-dong-chuang-kou-xian-zhao-dao-y/
来源:力扣(LeetCode)

答案

/*** @param {number} target* @param {number[]} nums* @return {number}*/
var minSubArrayLen = function(target, nums) {const n = nums.length;let ans = n + 1;    //初始化答案为不可能的值let s = 0, left = 0;for(let right = 0; right < n; right++) {    //移动右指针,扩大窗口s += nums[right];while(s >= target) {    //满足子数组和大于等于target条件的情况下ans = Math.min(ans, right - left + 1);    //更新最小长度值s -= nums[left];left++;    //移动左指针,缩小窗口}}return ans > n ? 0 : ans;    //若ans大于数组长度,则返回0
};

复杂度分析

时间复杂度:O(n),其中 n 为 nums 的长度。虽然写了个二重循环,但是内层循环中对 left 加一的总执行次数不会超过 n 次,所以总的时间复杂度为 O(n)。


空间复杂度:O(1),仅用到若干额外变量。

作者:灵茶山艾府
链接:https://leetcode.cn/problems/minimum-size-subarray-sum/solutions/1959532/biao-ti-xia-biao-zong-suan-cuo-qing-kan-k81nh/
来源:力扣(LeetCode)

http://www.xdnf.cn/news/17299.html

相关文章:

  • 目标检测数据集 - 无人机检测数据集下载「包含COCO、YOLO两种格式」
  • 【工具变量】地级市固定资产投资数据(2000-2023年)
  • 开发手札:UnrealEngine和Unity3d坐标系问题
  • Kubelet 探针如何选择 IP:status.PodIP 溯源与“同 Pod 两个 IP“现象解析
  • Go 实用指南:如何执行 Skyline 查询(Pareto 最优点筛选)
  • PID学习笔记1
  • 基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
  • 【洛谷题单】--分支结构(三)
  • DigitalProductId解密算法php调试版piddebug.php
  • 七、《Serverless架构:按毫秒计费的成本革命》--从新浪AI推理平台50%效能提升看无服务器本质
  • vscode/trae 的 settings.json 中配置 latex 的一些记录
  • Android--监听软键盘弹出隐藏事件
  • CamX-骁龙相机修改
  • BPMN编辑器技术实现总结AI时代的工作流编辑器
  • 香港服务器容器网络插件的多节点通信性能基准测试
  • 从灵感枯竭到批量产出:无忧秘书创作平台如何重构内容生产者的工作流程?全环节赋能分析
  • 分布式锁详解及 Spring Boot 实战示例
  • K-means聚类学习:原理、实践与API解析
  • 电子电气架构 --- 48伏电气系统架构
  • Docker Desktop 使用操作指南
  • 微服务的好与坏
  • DAY 39 图像数据与显存
  • 移动端开发中类似腾讯Bugly的产品推荐与比较-5款APP异常最终产品推荐-卓伊凡|bigniu
  • 线程池分析与设计
  • 全面了解selenium
  • [linux] Linux:一条指令更新DDNS
  • Docker容器部署discuz论坛与线上商城
  • Uber的MySQL实践(一)——学习笔记
  • python学智能算法(三十五)|SVM-软边界拉格朗日方程乘子非负性理解
  • token过期为了保证安全,refresh token不过期,那么拿到refresh token就可以获取token,不还是不安全吗