题目描述:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
分析:
合理使用位运算,两个相同的数字求异或,结果为0
代码:
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
if(data.size()<2) return;
int resultOR=0;
for(auto a:data)
resultOR^=a;
int firstIndex=findFirstIndex(resultOR);
*num1=*num2=0;
for(int j=0;j<data.size();++j){
if(IsBit1(data[j],firstIndex)){
*num1^=data[j];
}else
*num2^=data[j];
}
}
int findFirstIndex(int k){
int n=0;
while((k&1)==0&&(k<8*sizeof(int))){
k=k>>1;
++n;
}
return n;
}
bool IsBit1(int data,int n){
data=data>>n;
return data&1;
}
};