题意:给出一个数组,数组中除了两个元素以外,其他元素都出现了两次,求这两个元素。
题解:把所有的元素异或起来。得到XOR,这个值实际就是要求的两个元素的异或,那么XOR的最右边的第一个1一定是这两个元素一个有的一个没有的,那么我们用这一位去区分这两个数,在异或一遍数组,如果数字的这一位上是1,异或到第一个数上,如果等于0,异或到第二个数上。
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int Xor = 0;
int n = nums.size();
for(int i = 0; i < n; i++)
Xor ^= nums[i];
int lowbit = Xor & -Xor;
int one = 0, two = 0;
for(int i = 0; i < n; i++)
{
if(lowbit & nums[i])
one ^= nums[i];
else two ^= nums[i];
}
vector<int> v;
v.push_back(one);
v.push_back(two);
return v;
}
};