劍指offer----陣列中只出現一次的數字
阿新 • • 發佈:2018-12-11
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。
//所有數字異或,最後得到的是兩個只出現一次的數字異或的結果,從低位到高位 //找到第一異或為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; } };