/* medium
请定义一个队列并实现函数 max_value 得到队列里的最大值,
要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
若队列为空,pop_front 和 max_value需要返回 -1
*/
import java.util.*;
class MaxQueue {
Queue<Integer> q;
Deque<Integer> dq;
public MaxQueue() {
q = new LinkedList<>();
dq = new ArrayDeque<>();
}
public int max_value() {
if (q.isEmpty()) return -1;
return dq.peekFirst();
}
public void push_back(int value) {
q.offer(value);
while (!dq.isEmpty() && dq.peekLast() < value) {
dq.pollLast();
}
dq.offerLast(value);
}
public int pop_front() {
if (q.isEmpty()) return -1;
if (q.peek().equals(dq.peek())) {
dq.pollFirst();
}
return q.poll();
}
}
day11:sword59Ⅱ
最新推荐文章于 2024-10-06 20:16:20 发布