n维数组内m长度滑动窗口最大值,转载

23 篇文章 0 订阅

https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.html

重在理解所维持的当前窗口内元素最大值及其右边较小值元素的下标的队列的用处:一个窗口内最大值元素左侧的元素在当前窗口内没用,对下一窗口最大值更没用,没用就是不用考虑。反而,一个窗口内最大值元素右侧的递减的元素,在当前窗口内没用,但下一窗口会"挤掉"其前一窗口最左侧的值,万一前一窗口最左侧的值就是前一窗口内最大值,那也要在维护的当前窗口内最大值元素及其右侧递减元素的下标队列中,也要pop_front()掉属于前一窗口的最大值下标,然后考察当前窗口新增的元素与队列中剩下(如果有的话)的递减元素们的大小,重新形成"当前窗口内最大值元素及其右侧递减的元素的下标队列"。

如果当前窗口的递减元素的下标队列中从右边开始的若干元素小于等于当前窗口新增的元素,那这些小于等于的元素不仅在当前窗口内不是最大值元素,在下一滑动窗口内也不会是最大元素,因而当前窗口的递减元素的下标队列不需要维护这些没有机会在所有窗口内作为最大值的"较小元素"的下标,干脆直接将其pop_back()弹出,直到队列中某下标的元素是大于当前窗口新增元素,那就把当前窗口新增元素也push_back()放进去,因为比当前窗口新增元素大的元素可能成为下个滑动窗口的最大元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值