LeetCode 剑指offer59. 队列的最大值
原题链接
中等
class MaxQueue {
public:
queue<int> que; // 保存队列中所有的数子
deque<int> maxque; // 保存队列中最大的数字(两端操作为O(1))
MaxQueue() {
}
int max_value() {
return maxque.size() ? maxque.front() : -1;
}
void push_back(int value) {
que.push(value);
// 维护 maxque 为递减序列,每次可以输出当前队列中最大的数
while(!maxque.empty() && maxque.back() < value)
maxque.pop_back();
maxque.push_back(value);
}
int pop_front() {
if(que.empty())
return -1;
int result = que.front();
que.pop();
if(result == maxque.front())
maxque.pop_front();
return result;
}
};
/**
* 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();
*/