思路:
用标志位的方法去做,把原数组中出现的数应该在的位置上的数置为负值,然后重新遍历如果大于0,说明未置为负值过,也就是表示从未出现过。
public class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> result = new ArrayList<Integer>();
int len = nums.length;
for (int i = 0; i < len; i++) {
int index = Math.abs(nums[i]) - 1;
if (nums[index] > 0)
nums[index] = -nums[index];
}
for (int i = 0; i < len; i++) {
if (nums[i] > 0)
result.add(i + 1);
}
return result;
}
}
Runtime:18ms