数组中只出现一次的数字

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;
}
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务