数组中只出现一次的数字

原文地址:https://www.jianshu.com/p/8e50ed40b5c6

时间限制:1秒 空间限制:32768K

题目描述

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

我的代码

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int* num2) {
        //所有数字异或后出现1的那个位置是只出现一次的两个数字出现不同的位置。
        int s=data.size();
        if(s<2)
            return;
        int tmp=data[0];
        for(int i=1;i<s;i++)
            tmp^=data[i];
        if(tmp==0)
            return;
        int count=0;
        while((tmp&1)==0){
            tmp>>=1;
            count++;
        }
        *num1=0;*num2=0;
        for(int i=0;i<s;i++)
            if(isOne(data[i],count))
                *num1^=data[i];
            else
                *num2^=data[i];
        return;
    }
    bool isOne(int x,int id){
        return (x>>id)&1;
    }
};

运行时间:3ms
占用内存:472k

原文地址:https://www.cnblogs.com/cherrychenlee/p/10822437.html