今天在做剑指 Offer 59 - II. 队列的最大值时遇到的问题
25行代码如果用 ==会报错,用equals才会通过
造成这样的原因是deque的peek()返回的是Integer类型,两个Integer类型进行比较是不会进行自动拆箱,比较的是内存地址,所以要用equals来比较值
如果一个int类型,一个Integer类型,两个进行==操作,会将Integer类型拆箱成int类型
所以25行代码改成
if(deque1.peekFirst().intValue()==deque2.peekFirst())也是可以通过的,因为intValue()方法将Integer类型转换成了int类型
class MaxQueue {
Deque<Integer> deque1,deque2;
public MaxQueue() {
deque1 = new LinkedList<>();
deque2 = new LinkedList<>();
}
public int max_value() {
if(deque1.isEmpty()) return -1;
return deque2.peekFirst();
}
public void push_back(int value) {
deque1.offerLast(value);
while(!deque2.isEmpty() && deque2.peekLast()<value){
deque2.pollLast();
}
deque2.offerLast(value);
}
public int pop_front() {
if(deque1.isEmpty()) return -1;
// 报错
if(deque1.peekFirst()==deque2.peekFirst()){
deque2.pollFirst();
}
//正确
// if(deque1.peekFirst().equals((deque2.peekFirst()))){
// deque2.pollFirst();
// }
return deque1.pollFirst();
}
}