442. Find All Duplicates in an Array 发表于 2022-01-25 Flip1234567891011121314151617class Solution { public List<Integer> findDuplicates(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) { // 已经被翻转过,收集该数字 list.add(abs); } else { nums[abs - 1] = -nums[abs - 1]; } } return list; }} Hash123456789101112131415161718192021222324252627class Solution { public List<Integer> findDuplicates(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(nums[i]); } } return numList; } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }} Reference442. Find All Duplicates in an Array