为什么我在 Java 中使用 int 而不是 Integer 时会出现无限循环?

Why do i get an infinite loop when I use int instead of Integer in Java?

我正在尝试解决问题1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit。我明白了逻辑,但有一个非常奇怪的问题,导致我不得不拉头发两个多小时。

这是代码:-

class Solution {
    public int longestSubarray(int[] nums, int limit) {
        Deque<Integer> maxDeque = new LinkedList();
        Deque<Integer> minDeque = new LinkedList();
        Queue<Integer> queue = new LinkedList();

        int maxLength = 1;

        for (int i = 0; i < nums.length; i++) {
            Integer temp = nums[i];
            //int temp = nums[i]; //If I uncomment this line and comment the above line, the code does not work.
            queue.offer(temp);

            while (!maxDeque.isEmpty() && maxDeque.peekLast() < temp) {
                maxDeque.removeLast();
            }

            while (!minDeque.isEmpty() && minDeque.peekLast() > temp) {
                minDeque.removeLast();
            }

            maxDeque.offerLast(temp);
            minDeque.offerLast(temp);

            while (maxDeque.peekFirst() - minDeque.peekFirst() > limit) {
                if (queue.peek() == maxDeque.peekFirst()) {
                    maxDeque.pollFirst();
                }

                if (queue.peek() == minDeque.peekFirst()) {
                    minDeque.pollFirst();
                }

                queue.poll();
            }

            
            maxLength = Math.max(maxLength, queue.size());

        }

        return maxLength;
    }
}

你看,当我将一个整数放入每个队列时,代码运行正常,但是当我将一个整数放入三个队列时,我得到一个 TLE。因此,在下面的代码中,如果 temp 为 Integer,则代码通过,但当 temp 为 int 时,它会给出一个 TLE。有人可以解释一下这是怎么回事吗?

不要使用 == 来比较 Integer。由于引用相等,它仅在 pre-box temp 时有效。使用 .equals() 代替:

if (queue.peek().equals(maxDeque.peekFirst())) {
    maxDeque.pollFirst();
}

if (queue.peek().equals(minDeque.peekFirst())) {
    minDeque.pollFirst();
}