剑指offer-数组中数字出现的次数

旧城冷巷雨未停 提交于 2020-01-31 02:44:22

问题一:数组中只出现一次的两个数字

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

源码: 

(num&1)记得打括号,记得打括号,记得打括号。重要的事情说三遍。

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        int nlength = data.size();
        if(nlength<2)    return;
        int sum = 0;
        for(int i=0; i<nlength; i++){
            sum ^= data[i];
        }
        int index = findfirst(sum);
        // num1=num2=0;
        for(int i=0; i<nlength; i++){
            if(isbit(data[i], index))
                *num1 ^= data[i];
            else
                *num2 ^= data[i];
        }
    }
    
    int findfirst(int num){
        int index=0;
        while((num&1)==0){
            num = num>>1;
            index++;
        }
        return index;
    }
    bool isbit(int num, int index){
        num = num>>index;
        return (num & 1)==1;
    }
};

第二题《数组中唯一只出现一次的数字》在牛客网上没有练习窗口,以后找到会补上。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!