2020-05-15
1.题目描述
队列的最大值
2.题解
这个题目有点像滑动窗口求最大值以及栈的最大值的结合体,我们可以模仿滑动窗口求最大值,开辟一个
双端队列来求解最大值。
3.代码
class MaxQueue {
public:
MaxQueue() {
}
int max_value() {
if (!myque.empty()) return mydeque.front();
return -1;
}
void push_back(int value) {
while (!mydeque.empty()&&mydeque.back()<=value){ // 如果当前双端队列中的元素小于x当前值,则出队列
mydeque.pop_back();
}
myque.push(value); // 入队列
mydeque.push_back(value); // 入双端队列
}
int pop_front() {
if (myque.empty()) return -1;
if (mydeque.front()==myque.front()) mydeque.pop_front();
int res=myque.front();
myque.pop();
return res; // 出队列
}
deque<int> mydeque;
queue<int> myque;
};
/**
* Your MaxQueue object will be instantiated and called as such:
* MaxQueue* obj = new MaxQueue();
* int param_1 = obj->max_value();
* obj->push_back(value);
* int param_3 = obj->pop_front();
*/