刷题总结 | 灵神 | 滑动窗口作业
1.滑动窗口使用前提
- 连续子数组
- 有单调性。比如数组元素均为正数,这意味着只要某个子数组满足题目要求,在该子数组内的更短的子数组同样也满足题目要求。
2.核心思路
1.固定右端点
2.遍历右端点
3.寻找左指针收缩条件,即while循环的条件,while循环的作用就是让不满足条件的子数组变成满足条件的子数组
也有些时候是while循环是让满足条件变成不满足条件,这时更新答案就是在while循环内了,因为while循环内才是满足题目条件的情况
一般情况题目条件就是左指针的收缩条件,左指针收缩条件的实现一般都是解题的关键点
4.看满足题目条件的情况是在whie循环外还是while循环内
5.在哪里满足题目条件就在哪里更新res
6.思考如何统计子数组的数量
注:虽然左指针收缩条件的实现一般是解题的关键点,但是如果是比较困难题目,可能在统计子数组数量,如何记录答案,答案更新条件的地方也会比较难想,笔者觉得需要多积累经验才会做着舒服点
3.每道题可能遇到的难点
1.如何统计子数组的数量,基本有以下两种
1.res+=(r-l+1);
2.res+=l
2.一开始做这方面题可能会想着的是,我在固定r时,把l移动了,那我在固定r+1的时候,需要不需要把l置为0?
这个一般都不需要,因为置为0可能就趋近于暴力做法了,而这道题可以用滑动窗口做,那肯定是不需要把l置为0的,如果非要置为0不可,那可能是左指针收缩条件没有找对。也有可能是自己觉得会漏掉情况,但是这个只要举个例子模拟一下就知道了到底会不会漏掉情况了。
4.题单
Day58 | 灵神 | 滑动窗口:长度最小的子数组&&乘积小于K的子数组&&无重复字符的最长子串-优快云博客
Day59 | 灵神 | 滑动窗口:最多K个重复元素的最长子数组&&找到最长的半重复子字符串-优快云博客
Day60 | 灵神 | 滑动窗口:最大连续1的个数III-优快云博客
Day61 | 灵神 | 滑动窗口:统计最大元素出现至少K次的子数组-优快云博客(需重点复习,统计子数组的方式方法)
Day62 | 灵神 | 滑动窗口:统计得分小于K的子数组数目-优快云博客
Day63 | 灵神 | 滑动窗口:将x减到0的最小操作数-优快云博客(需重点复习,思路的转变)
Day64 | 灵神 | 滑动窗口:最小覆盖子串-优快云博客(hard题还是hard题,思路比较简单,但是其他的细节的处理处理的很不好,需要复习)