一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。
用位運算,先將所有數字異或可以得到只出現一次的兩個數字異或的結果resXor,記下resXor右數第一個爲1的位置,說明num1和num2在這一位上是不同的,根據這個條件將整個數組分成兩組,每組所有數字相與,剩下的就是要求的數字。
代碼:
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int n=data.size();
int resXor=0;
for(int i=0;i<n;i++)
resXor^=data[i];
//int flag=resXor&(resXor-1)^resXor;
int flag = resXor&~(resXor-1);
for(int i=0;i<n;i++){
if((flag&data[i])==0)
(*num1)^=data[i];
else
*(num2)^=data[i];
}
}
};