目录
- 一、题目描述
- 二、算法原理
- 三、代码实现
一、题目描述
二、算法原理
三、代码实现
class Solution {
public:
vector<int> missingTwo(vector<int>& nums)
{
//找到a^b
int temp=0;
for(auto num:nums)
{
temp^=num;
}
for(int i=1;i<=nums.size()+2;i++)
{
temp^=i;
}
//找到temp中为1的比特位在第几位
int x=0;
while(1)
{
if(temp&(1<<x))
{
break;
}
else
{
x++;
}
}
//将nums与1-nums.size()+2分成两个部分 假设a的x位是1 那么b的x位为0
//第一部分a和x位为1的数 但是a只有1个
//第二部分b和x位为0的数 但是b只有1个
int a=0,b=0;
for(auto num:nums)
{
if((num>>x)&1)
{
a^=num;
}
else
{
b^=num;
}
}
for(int i=1;i<=nums.size()+2;i++)
{
if((i>>x)&1)
{
a^=i;
}
else
{
b^=i;
}
}
return {a,b};
}
};