1. 程式人生 > >劍指offer----陣列中只出現一次的數字

劍指offer----陣列中只出現一次的數字

題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。

//所有數字異或,最後得到的是兩個只出現一次的數字異或的結果,從低位到高位
//找到第一異或為1的位,記下來,根據這個位,將原來的陣列分做兩部分,可解
class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        int mark_number=0,mark_index=0;
        for(auto m:data)
        {
            mark_number^=m;
        }
        while(mark_number%2==0)
        {
            mark_index++;
            mark_number=mark_number>>1;
        }
        int sum1=0,sum2=0;
        for(auto m:data)
        {
            int k=m>>mark_index;
            if(k%2==1)
            {
                sum1^=m;
            }
            else
            {
                sum2^=m;
            }
        }
        *num1=sum1;
        *num2=sum2;
    }
};