leetcode:#59 - II. 队列的最大值
采用Java实现
class MaxQueue {
Queue<Integer> queue;
ArrayDeque<Integer> help; // 维护一个增队列保存最大值(不是单调的,有值可能相等)
public MaxQueue() {
queue = new LinkedList<>();
help = new ArrayDeque<>();
}
public int max_value() {
return queue.isEmpty() ? -1 : help.peekFirst();
}
// 数据规模为n,循环次数:1 <= k < n,此方法复杂度O(k);每个元素只会出队和入队queue一次,均摊下来无论出队还是入队操作复杂度都是O(n)
public void push_back(int value) {
queue.add(value);
while (!help.isEmpty() && value > help.peekLast()) {
help.pollLast();
}
help.addLast(value);
}
public int pop_front() {
if (queue.isEmpty()) {
return -1;
}
Integer target = queue.poll();
if (target.equals(help.peekFirst())) {
help.pollFirst();
}
return target;
}
}