数组中只出现一次的数字

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

思路详见剑指offer,这里值得注意的地方时位运算的操作。
如果检查一个int数的第n位是不是1,可以先把这个数右移n位,这样第n位就落到了最右端,这时候与1操作,如果不是1,那么与操作结果就是0.

int isBit(int x, int index){
    return (x>>index)&1;
}

void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
    int size = data.size();
    if(size<2)
        return;
    int res = data[0];
    for(int i = 1; i < size; i++){
        res = res^data[i];
    }
    if(res == 0)
        return;
    int index = 0;
    while((res&1) == 0){
        res = res >> 1;
        index++;
    }
    *num1 = *num2 = 0;
    for(int x : data){
        if(isBit(x,index))
            *num1 ^= x;
        else
            *num2 ^= x;
    }
}

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页