gpt4 book ai didi

java - 有人可以解释这两个循环之间的区别吗?

转载 作者:行者123 更新时间:2023-11-29 10:11:48 26 4
gpt4 key购买 nike

   while(n>= 0 && nums[n] == value){  
n--;
}

while(n>=0 && nums[n--] == value){
}

我认为这两个循环的工作原理应该完全相同。发生的事情是我运行测试用例 input[4,5] value=4。并获得超出边界的数组索引。但是,如果我可以进入另一个循环,它就可以工作。

public int removeElement(int[] nums, int val) {
if(nums.length == 0) return 0;
// use two pointers, n for the right most of the item, which value != val.
// i for the start pointer.
int n = nums.length-1;
int i = 0;
while(n>= 0 && nums[n--] == val){
}

while(i <= n){
// as long as the curr items is equal to the valu
// replace it by the right most of the value, decrement the n
// pointer, until find another item which is not equal to val.
if(nums[i] == val){
nums[i] = nums[n]; //
while(n >= 0 && nums[--n] == val){
}
}
i++;
}
return n+1;
}

最佳答案

它们不一样。

在第一个循环中,只有当 n >= 0nums[n] = value 时,n 才会递减。

public void loop1() {
int n = 0;
int[] nums = new int[]{1};
int value = 2;

// n >= 0 is true
// nums[n] == value is false
// Therefore while condition is false and n is NOT decremented
while(n>= 0 && nums[n] == value){
n--;
}
// n = 0
System.out.println("n=" + n);
}

在第二个循环中,如果 n >= 0,则 n 递减,无论 nums[n] == value 是否为真或错误。

public void loop2() {
int n = 0;
int[] nums = new int[]{1};
int value = 2;

// n >= 0 is true
// nums[n--] == value executes in 2 steps:
// 1. nums[n] == value
// 2. n = n - 1 WILL EXECUTE regardless of result being true/false
while(n>= 0 && nums[n--] == value){
}
// n = -1
System.out.println("n=" + n);
}

关于java - 有人可以解释这两个循环之间的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com