Flip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { int abs = Math.abs(nums[i]); if (nums[abs - 1] > 0) { nums[abs - 1] *= -1; } }
for (int i = 0; i < nums.length; i++) { if (nums[i] > 0) { list.add(i + 1); } }
return list; } }
|
Hash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> numList = new ArrayList<>();
for (int i = 0; i < nums.length; i++) { int targetIndex = nums[i] - 1; while (nums[i] != nums[targetIndex]) { swap(nums, i, targetIndex); targetIndex = nums[i] - 1; } }
for (int i = 0; i < nums.length; i++) { if (nums[i] != i + 1) { numList.add(i + 1); } }
return numList; }
private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
|
References
448. Find All Numbers Disappeared in an Array