力扣448 找到所有数组中消失的数字

感觉思路很巧妙,简单记录一下
看官网题解看的很晕,感觉是被各种名称绕晕的
然后突然一下就get到了

思路:
1.在原数组上进行修改
2.已知原数组中的元素范围在1-n之间
3.因此可以将原数组各元素遍历作为 索引位置 再重新去访问该索引位置上的原数组的数,并加上n。(这点很重要)
4.这样,能被访问到的元素值最后都会大于n。
5.没有被访问到的元素,代表原数组中没有出现该元素所在位置的索引数字。
6.因为数组中元素在1-n之间,因此,需要将遍历访问的元素-1,这样才能获取到索引位置为0的元素。
7.最后没被访问到的元素位置+1,就是没有在数组中的数字

int n = nums.length;
        for (int num : nums) {
            int x = (num - 1)% n;//通过遍历原数组的值获得索引位置
            nums[x] += n;//给该索引位置上的元素赋值,最后能被访问到的元素都大于n
        }
        ArrayList<Integer> rec = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            if(nums[i] <= n){
                rec.add(i+1);
            }
        }
        return rec;

你可能感兴趣的:(算法,数据结构)