滑动窗口学习记录
1. 滑动窗口是什么?
就是有一个大小可变(不定长)或不可变(定长)的窗口,左右两端方向一致的向前滑动。
可以想象成一个队列,一端在push元素,另一端在pop元素,然后在每轮push和pop中完成更新或其他判别操作。
2. 滑动窗口可以解决什么问题?
适用范围:
1、一般是字符串或者列表
2、一般是要求最值(最大长度,最短长度等等)或者子序列
3. 基本实现思路
3.1 定长滑动窗口求可行解个数
求解思路
此类问题,假设固定窗口宽度为k,数据集大小为numsSize;
只需定义左指针left即可,窗口可以被描述为[left, left + k - 1],left的遍历范围为[0, numsSize - k - 1];
在遍历过程中,指针不断向后移动,更新窗口内元素的某项指标,判断该指标是否满足条件,确定该窗口是否是可行解;
在指针向后移动的过程中,注意更新因窗口左边界离开窗口和新元素进入窗口而引起窗口内某项指标的变化;
3.2 定长滑动窗口相关刷题
(1)1456. 定长子串中元音的最大数目
我的题解文章地址:leetcode-1456. 定长子串中元音的最大数目
(2)2269. 找到一个数字的 K 美丽值
我的题解文章地址:leetcode-2269. 找到一个数字的 K 美丽值
(3)1984. 学生分数的最小差值
我的题解文章地址:leetcode-1984. 学生分数的最小差值
(4)643. 子数组最大平均数 I
我的题解文章地址:leetcode-643. 子数组最大平均数 I
(5)1343. 大小为 K 且平均值大于等于阈值的子数组数目
我的题解文章地址:leetcode-1343. 大小为 K 且平均值大于等于阈值的子数组数目
其他
2090. 半径为 k 的子数组平均值
2379. 得到 K 个黑块的最少涂色次数
1052. 爱生气的书店老板
2841. 几乎唯一子数组的最大和
2461. 长度为 K 子数组中的最大和
1423. 可获得的最大点数
2134. 最少交换次数来组合所有的 1 II
2653. 滑动子数组的美丽值
567. 字符串的排列
438. 找到字符串中所有字母异位词
2156. 查找给定哈希值的子串
2953. 统计完全子字符串
3.2 不定长滑动窗口相关刷题
3.2.1 求最长/最大
(1)3. 无重复字符的最长子串
我的题解文章地址:leetcode-3. 无重复字符的最长子串
其他
1493. 删掉一个元素以后全为 1 的最长子数组 1423
2730. 找到最长的半重复子字符串 1502
904. 水果成篮 1516
1695. 删除子数组的最大得分 1529
2958. 最多 K 个重复元素的最长子数组 1535
2024. 考试的最大困扰度 1643
1004. 最大连续1的个数 III 1656
1438. 绝对差不超过限制的最长连续子数组 1672
2401. 最长优雅子数组 1750
1658. 将 x 减到 0 的最小操作数 1817
1838. 最高频元素的频数 1876
2516. 每种字符至少取 K 个 1948
2831. 找出最长等值子数组 1976
2106. 摘水果 2062
1610. 可见点的最大数目 2147
2781. 最长合法子字符串的长度 2204
2968. 执行操作使频率分数最大 2444
395. 至少有 K 个重复字符的最长子串
1763. 最长的美好子字符串
3.2.2 求最短/最小
209. 长度最小的子数组
1234. 替换子串得到平衡字符串 1878
1574. 删除最短的子数组使剩余数组有序 1932
76. 最小覆盖子串
面试题 17.18. 最短超串
3.2.3 不定长滑动窗口(求子数组个数)
2799. 统计完全子数组的数目 1398
713. 乘积小于 K 的子数组
1358. 包含所有三种字符的子字符串数目 1646
2962. 统计最大元素出现至少 K 次的子数组 1701
2302. 统计得分小于 K 的子数组数目 1808
2537. 统计好子数组的数目 1892
2762. 不间断子数组 1940
2972. 统计移除递增子数组的数目 II 2153
3.2.4 多指针滑动窗口
930. 和相同的二元子数组 1592
1248. 统计「优美子数组」 1624
2563. 统计公平数对的数目 1721
1712. 将数组分成三个子数组的方案数 2079
2444. 统计定界子数组的数目 2093
992. K 个不同整数的子数组 2210