448. Find All Numbers Disappeared in an Array
解法一:空间复杂度O(n)。思路:借助一个数组记录下某一数数否出现过。
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> res=new ArrayList<Integer>();
int visit[]=new int[nums.length+1];
for(int i=0;i<=nums.length-1;i++)
visit[nums[i]]=1;
for(int i=1;i<=visit.length-1;i++)
if(visit[i]==0)
res.add(i);
return res;
}
}
思路:考虑到数组中数字的范围是1-n,可以看成是数组的index索引,改变所有出现的索引对应的数组的数值,然后判断那些仍未被改变。
下面第一个是修改为大于n的,第二个是修改成小于0的。
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
int n=nums.length;
List<Integer> res=new ArrayList<Integer>();
for(int i=0;i<=nums.length-1;i++)
nums[(nums[i]-1)%n]+=n;
for(int i=0;i<=nums.length-1;i++)
if(nums[i]<=n)
res.add(i+1);
return res;
}
}
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> res=new ArrayList<Integer>();
for(int i=0;i<=nums.length-1;i++){
int val=Math.abs(nums[i])-1;
if(nums[val]>0)
nums[val]=-nums[val];
}
for(int i=0;i<=nums.length-1;i++){
if(nums[i]>0)
res.add(i+1);
}
return res;
}
}