滑动窗口学习路径
下面是一条建议的刷题顺序。每道题仍有独立的笔记页,可以做完后再补自己的思路。
入门:简单题
- 643. 子数组最大平均数 I:固定长度,维护窗口和。
- 1652. 拆炸弹:练习循环数组中的窗口。
- 2269. 找到一个数字的 K 美丽值:枚举固定长度的数字子串。
- 1876. 长度为三且各字符不同的子字符串:判断窗口内是否有重复字符。
- 2379. 得到 K 个黑块的最少涂色次数:统计窗口内需要修改的位置。
- 1984. 学生分数的最小差值:排序后枚举长度为
k的窗口。
基础:中等题
- 2090. 半径为 k 的子数组平均值:用前缀和快速求窗口和。
- 1456. 定长子串中元音的最大数目:练习进一个、出一个。
- 3. 无重复字符的最长子串:首次练习窗口收缩。
- 904. 水果成篮:限制窗口内元素种类。
- 1004. 最大连续 1 的个数 III:在给定预算内求最长窗口。
- 209. 长度最小的子数组:满足条件时收缩,求最短窗口。
- 2260. 必须拿起的最小连续卡牌数:求含重复元素的最短连续段。
- 567. 字符串的排列 → 438. 找到字符串中所有字母异位词:练习字符频率匹配。
进阶:中等题
- 1838. 最高频元素的频数:排序后维护变换成本。
- 2516. 每种字符至少取 K 个:把两端取字符转为保留中间窗口。
- 2799. 统计完全子数组的数目:统计满足条件的窗口个数。
- 2962. 统计最大元素出现至少 K 次的子数组:练习“越长越合法”的计数。
- 1438. 绝对差不超过限制的最长连续子数组 → 2762. 不间断子数组:维护窗口最值,再统计合法子数组。
挑战:困难题
- 2302. 统计得分小于 K 的子数组数目:窗口和与窗口长度一起参与约束。
- 992. K 个不同整数的子数组:用“至多
K”之差求“恰好K”。 - 76. 最小覆盖子串:维护多个字符的覆盖需求。
- 239. 滑动窗口最大值:用单调队列维护窗口最大值。
- 2444. 统计定界子数组的数目:同时处理最小值、最大值和无效位置。
- 2009. 使数组连续的最少操作数:排序去重后找覆盖最多元素的窗口。
- 862. 最短子数组之和至少为 K:前缀和与单调队列结合。
- 480. 滑动窗口中位数:维护窗口内的有序状态。