问题:
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
示例 1:
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
简单易懂的记忆桶解法:
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
int n=nums.length;
//新建输出答案的数组score
int[] score=new int[n];
//新建用来记录nums[]数组出现数字次数
int[] newArray=new int[n+1];
//原数组先从小到大排序
Arrays.sort(nums);
//遍历数组把原数组数字出现的次数记录在新数组桶上
for(int num:nums){
newArray[num]++;
}
//新建返回ArrayList
List<Integer> ret = new ArrayList<Integer>();
for(int i=0;i<newArray.length;i++){
//遍历记录桶,找到出现次数为0的就是没出现过的数字
if(newArray[i]==0){
//如果没出现的数字在[1,n]中就放入ArrayList输出
if(i>=1&&i<=n){
ret.add(i);
}
}
}
return ret;
}
}