题记:把全部数异或一次,然后在异或之后的数的位数中找一个1,将原数组分为两组,然后再次异或即可找到答案。
例:[4,1,4,6]
4 0100
4 0100
6 0110
1 0001
异或之后得:0111
找到其中一个1,取最后一位。
将原数组中最后一位为1的分为一组,为0的分为一组。
1为一组,4、4、6为一组。
这两组再异或一次即可得答案。
class Solution {
public:
vector<int> singleNumbers(vector<int>& nums) {
int sum=0;
for(auto x:nums)
sum^=x;
int div=1;
while((sum&div)==0)
div<<=1;
int a=0,b=0;
for(auto x:nums){
if(div&x)
a^=x;
else
b^=x;
}
return vector<int>{a,b};
}
};