1. 滑动窗口最大值
1.1 思路
1、使用暴力方法解决,两层循环,时间复杂度O(N*M)
2、使用单调队列来解决:
单调队列是一个从大到小的队列,队列内存放的是可能是窗口内的最大元素。单调栈的细节如图:
单调队列的操作:
(1)push(x) :x需要与队列入口的值进行比较,如果x小于等于队列入口值,则直接插入,如果x大,则队列尾部弹出,重新比较,直到队列中没有元素,或者x小于等于队列入口值。
(2)pop() :如果窗口弹出的值和队列出口处的值一致,则弹出队列出口值,否则不变。
1.2 代码
class MyQueue{
public:
deque<int> queue;
void push(int x){
while(!queue.empty() && x > queue.back()){
queue.pop_back();
}
queue.push_back(x);
}
void pop(int x){