单调队列
典型运用:求滑动窗口中的 最大值 or 最小值
举个例子:
给定输入序列:1、3、-1、-3、5、3、6、7,目的是将所有长度为3的滑动窗口中的max和min输出
则有:

和单调栈的思考模式差不多,先想想暴力求解是如何做的。
首先对于窗口我们用队列来维护,先从队列为空开始维护,
开始枚举每个元素,元素从队尾插入,此后队列中时刻都是维护的当前窗口中所有元素(k个元素,上图k=3),每一次移动的时候,分2步来操作:
- ① 将新元素插到队尾
- ② 把滑出去的元素从队头弹出
每一次求取极值的时候,暴力做法就是遍历队列中所有元素O(k)(窗口中含k个元素),
对于这种暴力做法的时间复杂度为O(nk)

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

被折叠的 条评论
为什么被折叠?



