面試題37 陣列中只出現一次的數字

2021-06-18 05:46:34 字數 907 閱讀 8486

題目:整型陣列中除了兩個數字之外,其他的數字都出現兩次,找出這兩個只出現一次的數字

思路:利用異或運算的性質:任何乙個數字異或自己都等於0

1.從頭到尾依次異或陣列中的每個數字,最終得到的結果就是兩個只出現一次的數字的異或結果;

2. 異或結果的二進位制表示中至少有一位為1,找到結果數字中第乙個為1的位的位置,記為第n位;

3. 以第n位是否為1為標準把原陣列中的數字分為兩個子陣列,第乙個子陣列中的每個數字的第n位都為1,

第二個子陣列中的每個數字的第n位都為0;

4. 最後分別對兩個子陣列進行異或運算,就可以求出兩個只出現一次的數字

**如下:

#include "stdafx.h"

#include using namespace std;

//整型陣列中除了兩個數字之外,其他的數字都出現兩次,找出這兩個只出現一次的數字

//要求:時間複雜度o(n),空間複雜度:o(1)

//判斷在num的二進位制表示中從右邊數起的indexbit位是否為1

bool isbit1(int num, int indexbit)

//在num的二進位制表示中找到最右邊是1的位

int findfirstbitis1(int num)

return indexbit;

} int nresultexlusiveor = 0;//記錄陣列中所有數進行異或之後的結果

for (int i=0; i執行結果:

《劍指Offer》面試題 陣列中只出現一次的數字

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。思路根據異或去重的原理,我們知道如果只有乙個只出現一次的數字的求法,但這裡是有兩個只出現一次的數字,我們便要想辦法把他分為兩個子陣列,每個子陣列中包含乙個只出現一次的數字,其他的數字都出現了兩次。劍...

面試題40 陣列中只出現一次的數字

參考 1.2.題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 需要用到的知識 位運算的異或操作 1.按位異或運算定義 1 1 0 1 0 1 0 1 1 0 0 0 2.規律 定理一a b b a 定理二 ...

面試題40 陣列中只出現一次的數字

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。解題思路 若是陣列中只有乙個數字出現一次,其餘的數字都出現偶數次,那麼直接將陣列中所有的數進行異或運算,得到的最後的結果就是出現一次的數 出現奇數次的數字 但是,題目要求是有兩個數出現一次,那麼上述...