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

不定长滑动窗口

不定长滑动窗口是双指针技术中最核心、最实用的算法模式之一,广泛用于求解连续子数组/子串的最值问题。

一、核心概念

滑动窗口用两个指针leftright表示一个连续区间[left, right]。指针只向右移动,通过动态调整窗口大小,避免暴力枚举的\(O(n^2)\)复杂度。

类型 窗口大小 典型问题
定长窗口 固定 k 子数组平均数、固定长度最大和
不定长窗口 动态变化 最长/最短满足某条件的连续子区间

二、什么时候用(前提条件)

使用不定长滑动窗口必须满足以下条件:

  1. 连续性:求的是子数组/子串(不能跳元素)
  2. 单调性:
    • 扩大窗口(right++)可能使条件从满足变为不满足,或从不满足变为满足。
    • 缩小窗口(left++)的作用与扩大窗口相反。
  3. 可快速维护:窗口状态(和、频次、极值等)能在\(O(1)\)更新。

不适用场景:子序列问题、条件无单调性(如“窗口内乘积为质数”)、需要全局排序

三、代码模板

不定长窗口通常分为两类:求最长求最短。模板结构几乎一致,仅更新答案时机不同。

🔹 模板 A:求最长满足条件的连续子数组/子串

public int longestWindow(int[] nums /*, 其他参数 */) {int left = 0;int maxLen = 0;// 【初始化】窗口状态变量(如 sum=0, int[] freq, HashMap, valid 计数等)for (int right = 0; right < nums.length; right++) {// 1️⃣ 扩大窗口:将 right 元素加入窗口// addToWindow(nums[right]);// 2️⃣ 条件不满足时,收缩左边界while (!isValidWindow()) {// removeFromWindow(nums[left]);left++;}// 3️⃣ 此时窗口一定合法,更新最大长度maxLen = Math.max(maxLen, right - left + 1);}return maxLen;
}

🔹 模板 B:求最短满足条件的连续子数组/子串

public int shortestWindow(int[] nums /*, target 等参数 */) {int left = 0;int minLen = Integer.MAX_VALUE;// 【初始化】窗口状态变量for (int right = 0; right < nums.length; right++) {// 1️⃣ 扩大窗口// addToWindow(nums[right]);// 2️⃣ 条件满足时,尝试收缩找更短的合法窗口while (isValidWindow()) {minLen = Math.min(minLen, right - left + 1);// removeFromWindow(nums[left]);left++;}}// 未找到合法窗口时返回 0 或题目要求的默认值return minLen == Integer.MAX_VALUE ? 0 : minLen;
}

Java 性能建议:字符频次统计优先用 int[128]int[26],比 HashMap<Character, Integer> 快 3~5 倍且无装箱开销。


避坑指南

坑点 正确写法
minLen 初始值用 0 必须用 Integer.MAX_VALUE,最后判断返回 0
while 写成 if 条件可能连续触发,必须用 while
left 越界检查 滑动窗口中 left 永远不会超过 right + 1,一般无需额外判断
字符串频繁 charAt 可提前 char[] arr = s.toCharArray(); 提升速度
大数求和溢出 窗口和可能超 int 时,状态变量改用 long

leetcode题单

【算法题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环)

http://www.jsqmd.com/news/620222/

相关文章:

  • 【C 语言系统入门教程】第 8 讲:VS 实用调试技巧 | 零基础学习笔记
  • 4000元作业批改准的学习机哪个好?2026兼顾护眼与批改的旗舰之选 - 速递信息
  • x64dbg实战指南:从零开始掌握程序调试与分析技巧
  • Maomi.In | .NET 全能多语言解决方案陀
  • 餐厅问答智能体构建全流程指南,AI智能体开发进阶项目
  • 小红的图上加边【牛客tracker 每日一题】
  • 终极指南:3分钟为Axure RP安装中文语言包,告别英文界面困扰
  • 2026 年在职雅思稳过机构权威榜单:上班族高效出分指南,监督为王、稳过无忧 - 速递信息
  • 如何在Windows上轻松安装APK文件:APK-Installer完整指南
  • 【研报299】2026电动汽车牵引电机技术创新机遇研究报告:AI与先进冷却的创新方向
  • 深入解析安卓USB升级包:如何高效提取关键镜像文件
  • 如何提高C编程能力
  • 靠谱的石油套管生产厂家 - 资讯焦点
  • 章二 直通心灵的窗口
  • 2026年佛山GEO优化公司哪家好?推荐评测口碑对比知名七家排名
  • DeepSeek教我如何诡辩
  • WEB-RTC vs H.323
  • ◇【技术解析】TD3算法:如何通过Clipped Double Q-learning解决Actor-Critic中的高估问题
  • 2026雅思机构权威榜单发布|财政紧缩下的教育投资,如何用市场经济眼光选对雅思机构? - 速递信息
  • XShell突然罢工?别慌!手把手教你用FinalShell快速接管服务器运维(附下载与基础配置)
  • 第X篇:COZE实战指南 【基于COZE工作流打造智能视频素材提取引擎】全流程解析
  • 甜味剂超细粉碎工艺与设备选型全攻略
  • PDE (Processing D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v..执
  • 2026雅思机构权威实测榜|刚需备考选哪家? - 速递信息
  • 百度网盘直链解析:突破限速实现10倍下载加速的终极指南
  • 计算机毕业设计:Python全国天气爬虫可视化预测系统 Django框架 线性回归 数据分析 大数据 机器学习 大模型 气象数据(建议收藏)✅
  • 2026雅思备考指南!五大机构对比,多次元教育凭实力稳居榜首 - 速递信息
  • 山东鼎恩家庭教育骗人的还是真的?看完这5个方面你就明白了 - 资讯焦点
  • MetaGPT实战:5分钟搭建你的第一个AI开发团队(含角色配置与代码生成)
  • 前端小白必看:30天轻松掌握AI开发,收藏这文章让你薪资翻倍!