数组中只出现一次的数字
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int n = data.size();
int res;
for(int i = 0; i < n; i++)
{
res ^=data[i];
}
int oneInBit = findBitOne(res); //该位记录从右往左数第几位是1
if(!oneInBit)
return;</int>
for(int i = 0; i<n; i++) { if(isNBitOne(data[i], oneInBit)) *num1 ^=data[i]; else *num2 ^= data[i]; } }
private:
int findBitOne(int num)
{
int oneInBit = 1;
while(((num&1) == 0)&& (oneInBit)<=32)
{
oneInBit ++;
num = num>>1;
}//循环结束,oneInBit为1所在的位数
return oneInBit>=1 ? oneInBit:0;
}
bool isNBitOne(int num, int oneInBit)
{
while(oneInBit!=1)
{
num = num>>1;
oneInBit--;
}
if(num&1)
return true;
else
return false;
}
};