在java数组之外迭代,为什么会发生这种情况?
我对编码比较陌生,我正在开始审查leetcode,并在一个问题上苦苦挣扎……看着提供的3ms运行时解决方案leetcode,我对findDisappearedNumbers方法中第四行的功能感到困惑 我的假设是,对于运行'arr[nums[i]-1]+'的0索引,会将4分配给arr[0],但它会分配1。有人能帮我理解发生了什么事吗 运行此代码的结果是:[1,2,2,1,0,0,1,1]在java数组之外迭代,为什么会发生这种情况?,java,arrays,loops,Java,Arrays,Loops,我对编码比较陌生,我正在开始审查leetcode,并在一个问题上苦苦挣扎……看着提供的3ms运行时解决方案leetcode,我对findDisappearedNumbers方法中第四行的功能感到困惑 我的假设是,对于运行'arr[nums[i]-1]+'的0索引,会将4分配给arr[0],但它会分配1。有人能帮我理解发生了什么事吗 运行此代码的结果是:[1,2,2,1,0,0,1,1] import java.util.ArrayList; import java.util.List; impo
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
public class FindAllNumbersDisappearedInAnArray {
public static void main(String[] args) {
int[] arr = new int[]{4,3,2,7,8,2,3,1};
/*System.out.println(findDisappearedNumbers(arr));*/
System.out.println(Arrays.toString(findDisappearedNumbers(arr))); //user added for examing code
}
public static int[] /*List<Integer>*/ findDisappearedNumbers(int[] nums) { //int[] was user added for examing code
List<Integer> list = new ArrayList<>();
int[] arr = new int[nums.length];
for(int i = 0; i < nums.length; i++) {
arr[nums[i] - 1]++; //What is happening here?
}
for(int i = 0; i < nums.length; i++) {
if(arr[i] == 0) {
list.add(i+1);
}
}
/*return list;*/
return arr; //user added for examing code
}
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.array;
公共类FindAllNumbersdisappearedinarray{
公共静态void main(字符串[]args){
int[]arr=新的int[]{4,3,2,7,8,2,3,1};
/*System.out.println(findDisappearedNumbers(arr))*/
System.out.println(Arrays.toString(findDisappearedNumbers(arr));//为检查代码而添加的用户
}
公共静态int[]/*List*/finddisAppearedNumber(int[]nums){//int[]是用户为检查代码而添加的
列表=新的ArrayList();
int[]arr=新int[nums.length];
对于(int i=0;i
(问题是:
给定一个整数数组,其中1≤ a[i]≤ n(n=数组大小),一些元素出现两次,其他元素出现一次
查找[1,n]中未出现在此数组中的所有元素
您是否可以在没有额外空间的情况下在O(n)运行时执行此操作?您可以假定返回的列表不算作额外空间。)在表达式中
arr[nums[i]-1]++
,nums[i]-1
确定了arr[]
中某个值的索引,而不是应该嵌入其中的值。然后,由于++
,找到的值将增加1
知道int的默认值是0,所以当初始化arr[]
时,它只包含零,我们可以看到,在第一个for循环的第一次迭代之后arr[]
是[0,0,0,1,0,0,0,0]。我们在arr[]
的第4位(从1开始)看到一个1,这意味着在nums[]
中找到了一个4
如果在第一个for循环后添加System.out.println(Arrays.toString(arr)
,您将看到以下输出:[1,2,2,1,0,0,1,1]。根据上述逻辑,这意味着nums[]
包含一个1,2个2,2个3,1个4,no 5,no 6,一个7和一个8