文章目录
- 滑动窗口算法总结
- 1.暴力求解vs滑动窗口
- 2.需要注意的细节问题
- 2.滑动窗口的基本模板
- 1.非固定窗口大小的滑动窗口
- 2.固定窗口大小的滑动窗口
- 细节
滑动窗口算法总结
1.暴力求解vs滑动窗口
遇到那些可以转化成一个子数组的长度的问题时,往往需要用到双指针。
在暴力求解的情况下,在遇到判断条件不成立时,往往需要从right回到left重新往后走。
但是如果可以让right没有往回走的必要时,就产生了”同向双指针“,这时,就引入了滑动窗口的解决办法。
2.需要注意的细节问题
每一道题开始都不会马上想到要滑动窗口,都是在暴力求解(On^2)的基础上,对指针进行优化,得到同向双指针的。
所以在暴力写出来时,发现能提高大部分的示例,但总有一些超长示例导致超时。
首先得写出暴力求解的办法。
暴力求解的情况下,大部分题都是有两层循环的,一层循环是让right < n,一层是让left < n。
每次right往后走,都会有一个变量记住这个nums[right],进行累加或者其他操作。
当该变量不满足target的要求时,就需要重新让right会到left的位置重新开始,而left会先往后走一步。
2.滑动窗口的基本模板
其中,更新结果的顺序不是固定的,根据题目的实际情况判断需要在哪个位置更新结果。
1.非固定窗口大小的滑动窗口
2.固定窗口大小的滑动窗口
细节
-
1.使用一个count变量+双哈希表来维护,在判断的时候就不用再进行遍历了。
count变量一般用来记录窗口内有效字符/有效字符串的大小。 -
2.一般来说,在判断层面,有时候是符合条件的出窗口
-
有时候是不符合条件的出窗口。