image.png

思路

使用标志位
遍历数组,将对应下标上的元素更改为负数来表示已经出现过。

  1. public List<Integer> findDisappearedNumbers(int[] nums) {
  2. List<Integer> res = new ArrayList<>();
  3. for(int i=0;i<nums.length;i++){
  4. //计算对应的下标
  5. int val = Math.abs(nums[i])-1;
  6. //对应位置上更改为负数
  7. if(nums[val]>0)
  8. nums[val]=-nums[val];
  9. }
  10. for(int i=0;i<nums.length;i++)
  11. if(nums[i]>0)
  12. res.add(i+1);
  13. return res;
  14. }