題目描述
一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。
同leetcode260
tips: 先用一遍異或,找出1位爲1的位置,然後根據這一位將數組分爲兩部分,再分別進行異或
注意 : == != 等於/不等於 的優先級比
& 按位與 較高
面試微軟的時候做了這題,當時沒做出來…
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* numA,int *numB) {
int xor_res=0;
int num1=0,num2=0;
for (int i = 0; i < data.size(); i++)
{
xor_res^=data[i];
}
int bit1=1;
while ((xor_res&1)==0)
{
xor_res>>=1;
bit1<<=1;
}
for (int i = 0; i < data.size(); i++)
{
if((data[i]&bit1)!=0) {
num1^=data[i];
} else {
num2^=data[i];
}
}
*numA=num1;
*numB=num2;
}
};