为什么我在 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();
}
我正在尝试解决问题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();
}