剑指 Offer 59 - II. 队列的最大值

58 阅读1分钟

今天在做剑指 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();
    }
}