一.题目解析

有一个数组,里面的数都是成双成对的,只有两个是单独的
算法讲解:位运算
我们可以利用消消乐A^A=0来消除相同的数字,只剩下a^b=tmp

再循环进行异或消消乐就可以再AB数组分别得到ab
二.代码编写
cpp
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int tmp=0;
for(int num:nums)
{
tmp^=num;
}
int x=0;
if(tmp==INT_MIN)
{
x=tmp;
}
else
{
x=tmp&(-tmp);
}
vector<int>a,b;
for(auto num:nums)
{
if((num&x)!=0)a.push_back(num);//第x位是1的*****
else b.push_back(num);//第x位是0的
}
int num1=0,num2=0;
for(auto x:a)
{
num1^=x;
}
for(auto y:b)
{
num2^=y;
}
return {num1,num2};
}
};