题意:找出数组中没有出现过的元素。
思路:看到这个题目的条件 1 ≤ a[i] ≤ n (n = size of array),感觉似曾相识。考虑之前的题目442,寻找重复元素。思想是一致的,都是将数组元素值作为索引,对应改变数组元素的正负值,根据改变的结果找出最终答案。这个数组中元素对应的索引分为三种情况:1.元素正常出现一次,此情况下这些元素的索引位置会被访问一次;2.重复元素,会被访问两次;3.不出现的元素,不会被访问。根据索引值对应元素的特点来进行分类即可。
代码如下:
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List <Integer> res =new ArrayList<Integer>();
int v;
for(int i=0;i<nums.length;i++){
v=Math.abs(nums[i])-1;
if(nums[v]>0)
nums[v]=-nums[v];
}
for(int i=0;i<nums.length;i++)
{
if(nums[i]>0)
res.add(i+1);
}
return res;
}
}