【算法】滑动窗口

滑动窗口应用场景

关键词:
满足xxx条件(计算结果,出现次数,同时包含)
最长/最短
子串/子数组/子序列
例如:长度最小的子数组

滑动窗使用思路(寻找最长)

核心:左右双指针(L,R)在起始点,R向右逐位滑动循环
每次滑动过程中
如果:窗内元素满足条件,R向右扩大窗口,并更新最优结果
如果:窗内元素不满足条件,L向右缩小窗口
直到R到达结尾。

例子:寻找队列里面最长的红球数量
首先滑动右指针,发现有一个红球,更新最大的数量Max为1,然后接着右移;
在这里插入图片描述
右移之后,发现没有更新最大值,那么就把左指针进行更新,左指针往右移;
在这里插入图片描述
左指针右移到与右指针重复的位置,进行右指针更新;
在这里插入图片描述
右指针接着往右移,右移的过程中发现,最大值得到更新,更新至3,一直移动到无法更新指针的为止,这时候该移动左指针;

在这里插入图片描述
同理移动左指针到与右指针重合;

在这里插入图片描述
按照上述方法继续移动右指针;
在这里插入图片描述
按照上述方法继续移动左指针,直至在左右指针达到最后点,循环完成。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

haven-852

你的鼓励是对我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值