Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java数组之外迭代,为什么会发生这种情况?_Java_Arrays_Loops - Fatal编程技术网

在java数组之外迭代,为什么会发生这种情况?

在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

我对编码比较陌生,我正在开始审查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;
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 5no 6,一个7和一个8