劍指offer 面試題56 數組中只出現一次的數字

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

同leetcode260
tips: 先用一遍異或,找出1位爲1的位置,然後根據這一位將數組分爲兩部分,再分別進行異或
注意 : == != 等於/不等於 的優先級比
& 按位與 較高

面試微軟的時候做了這題,當時沒做出來…

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* numA,int *numB) {
        int xor_res=0;
        int num1=0,num2=0;
        for (int i = 0; i < data.size(); i++)
        {
            xor_res^=data[i];
        }
        int bit1=1;
        while ((xor_res&1)==0)
        {
            xor_res>>=1;
            bit1<<=1;
        }
        for (int i = 0; i < data.size(); i++)
        {
            if((data[i]&bit1)!=0) {
                num1^=data[i];
            } else {
                num2^=data[i];
            }
        }
        *numA=num1;
        *numB=num2;
    }
};
發佈了94 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章