题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
代码
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int re = 0;
for (auto d : data) {//对所有元素进行异或
re ^= d;
}
int b = 1;
while ((re & 1) == 0) {//寻找re中位数为1的位置
b <<= 1;
re >>= 1;
}
int re1 = 0, re2 = 0;//对元素分成两组,每组有一个数出现一次
for (auto d : data) {
if (d & b) {//在 b=2^k,在k位上为1的一组
re1 ^= d;
} else {
re2 ^= d;
}
}
*num1 = re1;
*num2 = re2;
}
};