该题与442. Find All Duplicates in an Array题同理,殊途同归:
置位法和取负法分别如下:
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
vector<int> table;
//table=place(nums,table);
table=minus(nums,table);
return table;
}
vector<int> place(vector<int> &nums,vector<int> &table) //置位法
{
int i=0;
while(i<nums.size())
{
if(nums[i]!=i+1 && nums[i]!=nums[nums[i]-1])
{
int temp=nums[i]; // the relatting position
nums[i]=nums[temp-1];
nums[temp-1]=temp;
}
else
i++;
}
for(int i=0;i<nums.size();i++)
{
if(i+1!=nums[i])
table.push_back(i+1);
}
return table;
}
vector<int> minus(vector<int> &nums,vector<int> &table) //取负法
{
for(int i=0;i<nums.size();i++)
{
int flag=abs(nums[i]);
if(nums[flag-1]>0)
nums[flag-1]=-nums[flag-1];
}
for(int i=0;i<nums.size();i++)
{
if(nums[i]>0)
table.push_back(i+1);
}
return table;
}
};
本文介绍了一种使用置位法和取负法查找数组中消失数字的方法。通过两种不同的算法实现,帮助理解数组操作技巧。

被折叠的 条评论
为什么被折叠?



