题意理解
设计一个类,要求对队列的插入,删除,取最大值都是O(1)
问题分析
用普通队列解决插入,删除解决常量复杂度。
用双端队列+单调递减队列解决最大值常量复杂度。
其他
链接
class MaxQueue {
public:
MaxQueue() {
}
int max_value() {
if (my_que.size() == 0) {
return -1;
} else {
return my_deq.front();
}
}
void push_back(int value) {
my_que.push(value);
while(my_deq.size() && my_deq.back() < value) {
my_deq.pop_back();
}
my_deq.push_back(value);
}
int pop_front() {
if (my_que.size() == 0) return -1;
int val = my_que.front();
my_que.pop();
if(my_deq.front() == val) {
my_deq.pop_front();
}
return val;
}
private:
queue<int> my_que;
deque<int> my_deq;
};
/**
* 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();
*/