数组中只出现一次的数字

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
01-15 20:52
黑皮白袜臭脚体育生:五宿大战是吧,死去的记忆还在攻击我
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务