數組中只出現一次的數字

一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。

用位運算,先將所有數字異或可以得到只出現一次的兩個數字異或的結果resXor,記下resXor右數第一個爲1的位置,說明num1和num2在這一位上是不同的,根據這個條件將整個數組分成兩組,每組所有數字相與,剩下的就是要求的數字。

代碼:

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        int n=data.size();
        int resXor=0;
        for(int i=0;i<n;i++)
            resXor^=data[i];
        //int flag=resXor&(resXor-1)^resXor;
        int flag = resXor&~(resXor-1);
        for(int i=0;i<n;i++){
            if((flag&data[i])==0)
                (*num1)^=data[i];
            else
                *(num2)^=data[i];
        }
    }
};




發佈了133 篇原創文章 · 獲贊 23 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章