鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > c++ > >

数组中只出现一次的数字

来源:互联网 作者:佚名 时间:2016-06-16 09:03
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 无 class Solution {public: void FindNumsAppearOnce(vectorint data,int* num1,int *num2) {int length = data.size(); if(length 2) { *num1 = 0; *num2 =
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。  <无>
class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) 
    {
		int length = data.size();
  		if(length < 2)
        {
            *num1 = 0;
            *num2 = 0;
            return;
        }
        int temp = 0;
        for(int i = 0;i < length;++i)
        {
            temp ^= data[i];
        }
        int index = FindFirstBit1(temp);
        *num1 = *num2 = 0;
        for(int i = 0; i < length; ++i)
        {
            if(IsBit1(data[i],index))
                *num1 ^= data[i];
            else
                *num2 ^= data[i];
        }
    }
private:
    int FindFirstBit1(int num)
    {
        int index = 0;
        while((num&1)==0&&index < 32)
        {
            index++;
            num = num >> 1;
                
        }
        return index;
    }
    bool IsBit1(int num, int index)
    {
        if((num >> index) & 1)
            return true;
        return false;
    }
};
网友评论
<