https://leetcode.com/problems/find-all-duplicates-in-an-array/
由于要不用额外空间,因此还是染色法。一次遍历,把对应位置染成负数,如果本身已经是负数,说明之前已经出现过一次了,然后就加到结果里。
public class Solution {
public List<Integer> findDuplicates(int[] nums) {
List<Integer> res = new LinkedList<>();
if (nums == null || nums.length == 0) {
return res;
}
for (int i = 0; i < nums.length; i++) {
int index = Math.abs(nums[i]);
if (nums[index - 1] < 0) {
res.add(index);
}
nums[Math.abs(nums[i]) - 1] = -nums[Math.abs(nums[i]) - 1];
}
return res;
}
}