题目
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个
只出现一次的数字。
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int len = data.size();
if(len<2)return;
int one = 0;
for(int i=0;i<len;i++){
one = one^data[i]; //最后结果为两个不同的数字的异或
}
int flag = 1;
while(flag){
if(one&flag)break;
flag = flag<<1; //找出低位1所在的位
}
for(int i=0;i<len;i++){
//将数组分成两边,分别异或,最后得到结果
if(flag&data[i]) *num1 = *num1^data[i];
else *num2 = *num2^data[i];
}
}
};