【滑动窗口】算法总结


滑动窗口算法总结

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.一般来说,在判断层面,有时候是符合条件的出窗口

  • 有时候是不符合条件的出窗口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓富民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值