Given an array of integers where1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements of [1, n] inclusive that do not appear in this array.
Could you do itwithout extra spaceandin O(n) runtime? You may assume the returned listdoesnotcountas extra space.
Example:
Input:
[4,3,2,7,8,2,3,1]
Output:
[5,6]
二、解题
class Solution {
public:
/*
不管一个元素出现一次还是两次,只要出现它对应的位置就会被取负。
当某个元素不出现的时候,该元素对应的位置始终访问不到,所以还是正值,
通过这种方法我们就可以找到哪些元素没有出现。
*/vector<int> findDisappearedNumbers(vector<int>& nums) {
int len = nums.size();
for (int i = 0; i<len; i++) {
int m = abs(nums[i]) - 1; // index start from 0
nums[m] = nums[m]>0 ? -nums[m] : nums[m];
}
vector<int> res;
for (int i = 0; i<len; i++) {
if (nums[i] > 0) res.push_back(i + 1);
}
return res;
}
};
时间复杂度O(n)。