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

9.LeetCode 209. 长度最小的子数组 | 滑动窗口专题详解

目录1. 题目解析示例 1示例 22. 算法原理解法一暴力枚举所有子数组的和 —— O(n²)解法二利用单调性使用“同向双指针”来优化 —— O(n)✅ 怎么用图解过程正确性时间复杂度3. 编写代码OJ链接​ https://leetcode.cn/problems/minimum-size-subarray-sum/description/1. 题目解析本题来自 LeetCode 第 209 题长度最小的子数组。题目描述​给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其和 ≥target的长度最小的连续子数组​[nums[l], nums[l1], ..., 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关键点子数组必须是连续的要求和≥ target返回的是最小长度不是子数组本身若不存在返回02. 算法原理解法一暴力枚举所有子数组的和 —— O(n²)通过双重循环枚举所有子数组计算和并比较时间复杂度为 O(n²)在数据规模大时会超时。解法二利用单调性使用“同向双指针”来优化 —— O(n)这是本题的核心解法滑动窗口Sliding Window✅ 怎么用我们用两个指针left和right构建一个窗口窗口内的元素和记为sum窗口长度记为len。步骤如下初始化left 0,right 0进窗口​ →right向右移动将nums[right]加入sum判断​ → 如果sum target说明当前窗口满足条件尝试缩小窗口更新最小长度len min(len, right - left 1)出窗口​ →left向右移动sum - nums[left]重复步骤 2~3直到right遍历完整个数组图解过程以target 7, nums [2,3,1,2,4,3]为例初始left0, right0, sum0, len∞right0→ 进窗口sum2→ 不满足right1→ 进窗口sum5→ 不满足right2→ 进窗口sum6→ 不满足right3→ 进窗口sum8→ 满足→ 更新len4出窗口sum6, left1right4→ 进窗口sum10→ 满足→ 更新len4当前窗口 [3,1,2,4]出窗口sum8, left2right5→ 进窗口sum11→ 满足→ 更新len3[1,2,4]出窗口sum7, left3right5→ 再次判断sum7 7→ 更新len2[2,4]出窗口sum3, left4循环结束✅ 最终最小长度为2正确性利用单调性规避了很多没有必要的枚举行为因为数组元素都是正整数所以当sum target时我们移动left指针一定能缩小窗口且不会错过更优解。这是滑动窗口能成立的核心前提。时间复杂度right指针遍历数组一次 → O(n)left指针也最多移动 n 次 → O(n)总体O(n)✅ 从 nn → 2n → O(n)线性时间复杂度非常高效3. 编写代码以下是 Java 实现代码class Solution { public int minSubArrayLen(int target, int[] nums) { int n nums.length, sum 0, len Integer.MAX_VALUE; for (int left 0, right 0; right n; right) { sum nums[right]; // 进窗口 while (sum target) { // 判断 len Math.min(len, right - left 1); // 更新结果 sum - nums[left]; // 出窗口 } } return len Integer.MAX_VALUE ? 0 : len; } }可直接复制运行。欢迎在评论区留言交流我们一起把滑动窗口吃透OJ链接​ https://leetcode.cn/problems/minimum-size-subarray-sum/description/祝你刷题顺利早日拿Offer点个关注
http://www.zskr.cn/news/1415022.html

相关文章:

  • DMXAPI安全堡垒:为数据传输穿上“隐形铠甲”
  • 终极开源自动化神器:3步掌握KeymouseGo鼠标键盘录制工具
  • Arduino光敏电阻自动化玩Chrome恐龙游戏:从传感器到执行器的嵌入式实践
  • 拒绝无用 AI,让数据真正驱动业务增长
  • 像管代码一样管数据,版本控制实战指南
  • OpenBoard:保护隐私的Android开源输入法完全指南
  • 2026年国际本科硕博规划服务评测:四家机构核心能力对比 - 优质品牌商家
  • 如何在Mac上运行Windows应用?Whisky为你提供完美解决方案
  • 基于树莓派与Google日历的智能闹钟:硬件连接与Python自动化实践
  • OpenMetadata企业级元数据治理平台:MySQL数据库集成深度解析与高效实践
  • 2026重庆除甲醛避雷手册:Top5品牌横向对比与科学选择 - 绿舒环保母婴除甲醛
  • 2026年陶土烧结砖厂家选型指南:产品、性能与工程适配三维度解析 - 资讯速览
  • 用RDKit的摩根指纹做分子相似性分析:从SMILES到相似度矩阵的完整流程
  • 从零写一个 Python 目录扫描器:学习笔记
  • 别再死磕VBA了!用Python+pywin32给AutoCAD写脚本,5个实用函数搞定数据类型转换
  • Sora 2如何实现毫米级物理仿真?:拆解其隐式神经辐射场(iNeRF)+时空扩散双引擎架构
  • Arduino蓝牙遥控小车:从硬件选型到代码调试的完整实践指南
  • 老客户转介绍率不到5%,怎么设计一个让人愿意推荐的机制?
  • 文献 建立了 VoronaGasyCodes 鸟类公共数据库
  • C++ 继承详解(上):从代码复用到切片与隐藏
  • VideoDownloadHelper终极指南:免费快速下载全网视频的完整教程
  • DBX部署教程:打造支持AI SQL助手的数据库管理环境
  • 良久团购技术拆解:多层级结算系统如何支撑40万团长?
  • 别再只用Softmax了!聊聊Sparse Softmax在NLP任务中的实战效果与避坑指南
  • 《流畅的Python》读书笔记14(补充01): 从协议到抽象基类 - 策略模式实现动态折扣计算
  • Akagi麻将AI助手:告别凭感觉打牌,让数据驱动你的每一次决策
  • ChatGPT价值主张设计实战手册(从伪需求到真变现的7步飞轮模型)
  • OpenMetadata元数据管理实践指南:构建企业级数据治理平台
  • Tftpd64 TFTP服务器架构设计与企业级部署优化方案
  • 猫抓浏览器扩展:终极网页资源嗅探工具完全指南