解法:
⚠️:这里两个Integer比较大小,有128的限制,如果超过128,就是在比较对象。会造成报错,必须转化成int
public static void main(String[] args) {
Queue q = new LinkedList();
q.add(1);
q.add(2);
System.out.println(q.peek());
Deque d = new LinkedList();
d.addFirst(1);
d.addLast(2);
System.out.println(d.peekFirst());
MaxQueue max_value = new MaxQueue();
max_value.max_value();
max_value.pop_front();
max_value.max_value();
max_value.push_back(46);
max_value.max_value();
max_value.pop_front();
max_value.push_back(868);
max_value.pop_front();
max_value.pop_front();
max_value.push_back(525);
max_value.pop_front();
System.out.println(max_value.max_value());
// "MaxQueue",
// "max_value",
// "pop_front",
// "max_value",
// "push_back",
// "max_value",
// "pop_front",
// "max_value",
// "pop_front",
// "push_back",
// "pop_front",
// "pop_front",
// "pop_front",
// "push_back",
// "pop_front
// max_value
// [null],[-1],[-1],[-1],[46 null],[46],[46],[-1],[-1],[868 null],[868],[-1],[-1],[525 null],[525]
}
public static class MaxQueue {
Queue<Integer> q;
Deque<Integer> d;
public MaxQueue() {
q = new LinkedList<>();
d = new LinkedList<>();
}
public int max_value() {
if(d.isEmpty()) return -1;
return d.peekFirst();
}
public void push_back(int value) {
while(!d.isEmpty() && d.peekLast() < value){
d.pollLast();
}
d.addLast(value);
q.add(value);
}
public int pop_front() {
if(q.isEmpty()) return -1;
System.out.println(d.peekFirst() + "==" + q.peek());
int ans = q.poll();
if(d.peekFirst() == ans){
d.pollFirst();
}
return ans;
}