美文网首页面试算法
牛客-剑指0ffer-数组中只出现一次的数字

牛客-剑指0ffer-数组中只出现一次的数字

作者: wenyilab | 来源:发表于2019-08-14 08:28 被阅读4次

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

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

    相关文章

      网友评论

        本文标题:牛客-剑指0ffer-数组中只出现一次的数字

        本文链接:https://www.haomeiwen.com/subject/iajwjctx.html