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

LeetCode | 滑动窗口的原理及真题解析

滑动窗口是一种双指针技术,用于处理数组或字符串中连续区间的问题。通过一个“窗口”在数组上从左到右滑动,寻找满足某个条件的子区间。

动态维护一个“窗口”,只包含一段区间的数据,在保持区间性质的同时:

  • 右指针右移扩大窗口

  • 左指针右移缩小窗口

  • 最终得到一个最优解(最大/最小长度,出现次数等)

1.滑动窗口的常见形式

类型描述示例题目
固定长度窗口窗口大小固定,左右指针同步滑动Leetcode 239
可变长度窗口窗口根据条件动态调整左边界Leetcode 3 / 76
滑动+统计/哈希频率统计窗口内字符频率或特征Leetcode 567 / 438

2.如何判断 Leetcode 题目是否适合用滑动窗口?

常见关键词:

  • “连续子串 / 子数组”

  • “最长/最短长度”

  • “包含多少种字符”

  • “所有满足条件的子串”

  • “在字符串中查找模式/异位词”

典型特征:

特征是否适合滑动窗口
子区间必须是连续的
问题与字符/元素频率有关
多次查询子区间信息
涉及所有子集/组合/不连续位置❌(更适合回溯或位运算)

Leetcode 高频滑动窗口题目

题号题目类型
3无重复字符的最长子串可变长度窗口
76最小覆盖子串可变长度 + 字符频率
567字符串的排列固定长度 + 频率对比
438找到字符串中所有字母异位词固定长度 + 滑动频率
239滑动窗口最大值固定窗口 + 单调队列
209长度最小的子数组可变窗口 + 滑动加和
30串联所有单词的子串固定窗口 + 哈希

【Leetcode 76】最小覆盖子串 Minimum Window Substring

 给你字符串 s 和字符串 t,返回包含 t 所有字符的最小子串。如果不存在,返回空字符串。

#最优解:滑动窗口 + 字符计数
from collections import Counterdef minWindow(s: str, t: str) -> str:if not s or not t:return ""need = Counter(t)window = {}have = 0need_count = len(need)left = 0res = ""res_len = float("inf")for right, c in enumerate(s):window[c] = window.get(c, 0) + 1if c in need and window[c] == need[c]:have += 1while have == need_count:# 更新最小窗口if (right - left + 1) < res_len:res = s[left:right+1]res_len = right - left + 1# 移动左边界,缩小窗口window[s[left]] -= 1if s[left] in need and window[s[left]] < need[s[left]]:have -= 1left += 1return res#时间复杂度:O(|S| + |T|)
#空间复杂度:O(|T|)

【Leetcode 639】Sliding Window Maximum

 给你一个整数数组 nums 和一个整数 k,在所有大小为 k 的滑动窗口中找出最大值。

# 最优解:单调队列
from collections import dequedef maxSlidingWindow(nums, k):q = deque()res = []for i in range(len(nums)):# 移除窗口外的索引if q and q[0] <= i - k:q.popleft()# 维持单调递减栈:移除小于当前值的元素while q and nums[q[-1]] < nums[i]:q.pop()q.append(i)# 从第 k 个位置开始记录结果if i >= k - 1:res.append(nums[q[0]])return res#时间复杂度:O(n)
#空间复杂度:O(k)(最多存 k 个索引)

想要了解更多内容,可在VX小程序搜索🔍AI Pulse,获取更多最新内容。

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

相关文章:

  • JavaScript 数组与流程控制:从基础操作到实战应用
  • 八皇后问题深度解析
  • 05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作
  • 深入浅出工厂模式:从入门到精通(2025最新版)
  • Linux多线程
  • java教程笔记(九)-异常处理,枚举类,反射机制,注解
  • 使用 Preetham 天空模型与硬边太阳圆盘实现真实感天空渲染
  • 益莱储参加 Keysight World 2025,助力科技加速创新
  • Python正则表达式re模块
  • 资产智慧管理安全监测中心
  • 【物联网-TCP/IP】
  • 【AI学习】KV-cache和page attention
  • 【机器学习】主成分分析 (PCA)
  • AIGC图像去噪:核心原理、算法实现与深度学习模型详解
  • C++课设:智能优惠快餐点餐系统
  • 新建网站部署流程
  • glibc 交叉编译
  • Ansys Maxwell:线圈和磁体的静磁 3D 分析
  • 深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(1)
  • USB-C/HDMI 2.0 2:1 SW,支持4K60HZ
  • 如何选择有效的CoT提示提升模型推理性能!
  • 在历史项目升级中用SSR和SSG优化性能的实现流程
  • em/px/rem/vh/vw区别
  • IBMS综合运维平台业务分析与BA楼宇自控系统技术架构与应用
  • Node事件循环机制详解
  • 【QQMusic】在LikePage点击取消喜欢没有反应
  • (LeetCode 每日一题) 1061. 按字典序排列最小的等效字符串 (并查集)
  • 双空间知识蒸馏用于大语言模型
  • Android 本地存储路径说明
  • 创客匠人解密创始人IP打造:知识变现的三大核心逻辑