同Single Number,异或后按照得到的结果中bit位为1的将数组分为两组,结果必然各存在于这两组中,分别异或得到结果。代码如下:
vector<int> singleNumber(vector<int>& nums) {
int tmp = 0;
vector<int> result(2, 0);
for(auto num : nums) {
tmp ^= num;
}
int i = 0;
while(!(tmp >> i & 1)) ++i;
for(auto num : nums) {
if(num >> i & 1)
result[0] ^= num;
}
result[1] = result[0] ^ tmp;
return result;
}