给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
JAVA(HashMap):
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> list=new ArrayList<>(nums.length);
Map<Integer,Integer> map=new HashMap<>();
for(int num:nums){
map.put(num,num);
}
for(int i=1;i<=nums.length;i++) {
if(!(map.containsKey(i))){
list.add(i);
}
}
return list;
}
}
JAVA(HashSet):
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> list=new ArrayList<>(nums.length);
HashSet<Integer> set=new HashSet<>(nums.length);
for (int num:nums){
set.add(num);
}
for(int i=1;i<=nums.length;i++) {
if(!(set.contains(i))){
list.add(i);
}
}
return list;
}
}
JAVA(取反):
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
int n=nums.length;
for(int num:nums){
int x=Math.abs(num)-1;
if(nums[x]>0){
nums[x]=-nums[x];
}
}
List<Integer> result=new ArrayList<Integer>();
for(int i=0;i<n;i++){
if(nums[i]>0){
result.add(i+1);
}
}
return result;
}
}
JAVA(+n):
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
int n=nums.length;
for(int num:nums){
int x=(num-1)%n;
nums[x]+=n;
}
List<Integer> result=new ArrayList<>();
for(int i=0;i<n;i++){
if(nums[i]<=n){
result.add(i+1);
}
}
return result;
}
}