题目描述
限制:
1 <= push_back,pop_front,max_value的总操作数 <= 10000
1 <= value <= 10^5
题解
类似于上一题,维持一个单调双端队列
class MaxQueue {
Queue<Integer> queue = new LinkedList<Integer>();
// 关键就是维持一个单调的双端队列
Deque<Integer> helper = new LinkedList<Integer>();
public MaxQueue() {
}
public int max_value() {
if(helper.isEmpty()) return -1;
return helper.peekFirst();
}
public void push_back(int value) {
queue.offer(value);
// 维持双端队列的单调性
while(!helper.isEmpty() && helper.peekLast() < value)
helper.removeLast();
helper.addLast(value);
}
public int pop_front() {
if(queue.isEmpty()) return -1;
int val = queue.poll();
if(helper.peekFirst() == val) helper.removeFirst();
return val;
}
}
/**
* int param_3 = obj.pop_front();
*/