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

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,获取更多最新内容。

相关文章:

  • 驱动:字符驱动操控硬件
  • Nginx部署vue项目, 无法直接访问其他路径的解决方案
  • PostgreSQL 技术峰会,为您打造深度交流优质平台
  • c++算法学习3——深度优先搜索
  • labelme安装及遇到的问题
  • C++STL-vector的使用
  • ocrapi服务docker镜像使用
  • 计算机网络安全问答数据集(1788条) ,AI智能体知识库收集! AI大模型训练数据!
  • [蓝桥杯]螺旋矩阵
  • 关于智能体API参考接口
  • GLM-4 模型
  • 【AI News | 20250605】每日AI进展
  • eNSP实现WDS手拉手业务
  • C# 中的 IRecipient
  • java.io.IOException: Broken pipe
  • Linux系统删除文件后的恢复方法
  • 用 NGINX 搭建高效 IMAP 代理`ngx_mail_imap_module`
  • 【深度学习-Day 23】框架实战:模型训练与评估核心环节详解 (MNIST实战)
  • nvidia系列教程-agx-orin安装ros
  • Vehicle HAL(5)--vhal 实现设置属性的流程
  • 园林企业建设网站/企业网站的类型
  • 医疗器械网站建设/广州专做优化的科技公司
  • 邀请码网站怎么做/体验营销
  • 网站建设在微信里打广告内容/友情链接qq群
  • wordpress缩略图代码/兰州快速seo整站优化招商
  • 网站建设多久/深圳百度推广开户