可以在输入数组中用数字的正负来表示该位置所对应数字是否已经出现过。遍历输入数组,给对应位置的数字取相反数,如果已经是负数,说明前面已经出现过,直接放入输出数组。
class Solution {
public List<Integer> findDuplicates(int[] nums) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < nums.length; i++) {
int num = Math.abs(nums[i]);
if (nums[num - 1] < 0) {
list.add(num);
} else {
nums[num - 1] *= -1;
}
}
return list;
}
}