单调队列讲解 + AcWing 154. 滑动窗口

本文讲解了如何利用单调队列优化求解长度为3的滑动窗口中最大值和最小值问题,通过删除逆序对减少冗余比较,使得时间复杂度降至O(n)。通过实例和代码展示了如何构造和维护单调队列,以及在实际操作中的应用技巧。

单调队列

典型运用:求滑动窗口中的 最大值 or 最小值

举个例子

给定输入序列:1、3、-1、-3、5、3、6、7,目的是将所有长度为3的滑动窗口中的maxmin输出

则有:
在这里插入图片描述
单调栈的思考模式差不多,先想想暴力求解是如何做的。

首先对于窗口我们用队列来维护,先从队列为空开始维护

开始枚举每个元素,元素从队尾插入,此后队列中时刻都是维护的当前窗口中所有元素k个元素,上图k=3),每一次移动的时候,分2步来操作:

  • ① 将新元素插到队尾
  • ② 把滑出去的元素从队头弹出

每一次求取极值的时候,暴力做法就是遍历队列中所有元素O(k)(窗口中含k个元素),

对于这种暴力做法的时间复杂度为O(nk)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值