两个只出现一次的数字。

来源:互联网 发布:apache 开启https 编辑:程序博客网 时间:2024/05/22 09:42

思路:http://blog.csdn.net/morewindows/article/details/8214003

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        if(data.size()<=2||!num1||!num2) return;
        
        int temp=0;
        int len =data.size();
        //得到异或值
        for(int i=0;i<len;i++)
            temp^=data[i];
        if(temp==0) return;
        
        //找到位置
             int j;
        *num1=0;*num2=0;
        for(j=0;j<sizeof(int)*8;j++)
            if((temp>>j)&1) break;
        
       // 分两组异或
        for(int i=0;i<len;i++)
            if((data[i]>>j)&1)
               *num1^=data[i];
               else
               *num2^=data[i];
               
    }
};

原创粉丝点击