单调栈
单调栈是满足单调性的栈结构。
举例说明:
当向栈中插入元素时,为了维护栈的单调性(单调递增),需要弹出一些元素,而弹出元素的数目应该是最小的,之后再将元素插入到栈顶。
例如,栈中目前有元素
cpp
// 插入元素 x
stack<int> stk;
while (stk.size() && stk.top() <= x) {
stk.pop();
}
stk.push(x);单调队列
问题:
给定长度为
的整数数组,求每连续 个元素中的最大值和最小值?
暴力想法自然是两重循环,枚举每 TLE。
此时可以使用单调队列。
单调队列指的是队列中的元素满足单调递增或单调递减的性质。
例如我们维护一个单调递增队列
有如下序列:
操作如下:
| 操作 | 结果 |
|---|---|
| 此时 | |
总结,单调队列每一次操作遵循以下流程:
- 第一步从队头开始清理已不在窗口的元素
- 第二步从队尾开始清理不满足单调性质的元素
- 第三步将元素入队
