class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
int length = nums.size();
vector<int> v(length+1,0);
vector<int> v2;
for(int i =0;i<length;++i)
{
v[nums[i]]++;
}
for(int i=1;i<=length;++i)
{
if(v[i]==0)
{
v2.push_back(i);
}
}
return v2;
}
};
进阶:
进一步地,我们可以直接对原数组进行标记:把重复出现的数字在原数组出现的位置设为负数,最后仍然为正数的位置即为没有出现过的数。
代码实现:
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
//用于返回的数组
vector<int> ans;
for(auto &num :nums)
{
int pos = abs(num)-1;
if(nums[pos]>0)
{
nums[pos] = -nums[pos];
}
}
for(int i = 0;i<nums.size();i++)
{
if(nums[i]>0)
ans.push_back(i+1);
}
return ans;
}
};