数组中只出现一次的数字

题目描述

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

C++11(clang++ 3.9)

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        // input check
        if(data.size() < 2)
        {
            // num1, num2 ???
            return;
        }
        
        int xor_val = 0;
        int len = data.size();
        for(int i = 0; i < len; i++)
        {
            xor_val ^= data[i];
        }
        
        // find the first 1 bit
        int shift_index = 0;
        while(0 == (xor_val & 1))
        {
            xor_val >>= 1;
            shift_index++;
        }
        
        *num1 = 0;
        *num2 = 0;
        
        // use mask to divide data[] into 2 groups 
        // num1 and num2 will be in different groups
        int mask = (1 << shift_index); 
        for(int i = 0; i < len; i++)
        {
            if(0 == (data[i] & mask))
            {
                *num1 ^= data[i];
            }
            else
            {
                *num2 ^= data[i];
            }
        }
    }
};
原文地址:https://www.cnblogs.com/hotwater99/p/12432922.html