存储最大值的用双向队列,从后面压入,从前面弹出
class MaxQueue {
Queue<Integer> queue;
LinkedList<Integer> maxqueue;
public MaxQueue() {
queue = new LinkedList<>();
maxqueue = new LinkedList<>();
}
public int max_value() {
if(maxqueue.isEmpty()) return -1;
return maxqueue.peekFirst();
}
public void push_back(int value) {
queue.add(value);
while(!maxqueue.isEmpty() && value > maxqueue.getLast()){
maxqueue.removeLast();
}
maxqueue.add(value);
}
public int pop_front() {
if(queue.isEmpty()) return -1;
if(maxqueue.peek().equals(queue.peek())){
maxqueue.poll();
}
return queue.poll();
}
}
/**
* 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();
*/