思路
使用标志位
遍历数组,将对应下标上的元素更改为负数来表示已经出现过。
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> res = new ArrayList<>();
for(int i=0;i<nums.length;i++){
//计算对应的下标
int val = Math.abs(nums[i])-1;
//对应位置上更改为负数
if(nums[val]>0)
nums[val]=-nums[val];
}
for(int i=0;i<nums.length;i++)
if(nums[i]>0)
res.add(i+1);
return res;
}