来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array
1、题目
找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
示例 1:
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
示例 2:
输入:nums = [1,1]
输出:[2]
第一次遍历:将范围内的数据都加上N,这样不在范围内的数据则小于等于N。未出现的数字没有进行加N操作,肯定小于N。(num-1)%n
这个方式可以将数据还原,就算是重复的数据也可以解决。
第二次遍历:将小于N的数据取出来。
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
int n = nums.length;
for( int num : nums){
int x = (num-1)%n;//将范围内的数据都相加N,存在的数据都大于n
nums[x]+=n;
}
List<Integer> result = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++){
if(nums[i]<=n){
result.add(i+1);
}
}
return result;
}
}