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

2021-07-04 07:52:57 字數 434 閱讀 5870

題目描述

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

解題思路:

若是陣列中只有乙個數字出現一次,其餘的數字都出現偶數次,那麼直接將陣列中所有的數進行異或運算,得到的最後的結果就是出現一次的數(出現奇數次的數字)

但是,題目要求是有兩個數出現一次,那麼上述方法得到的結果是這兩個數的乙個異或結果。

我們可以考慮:將這兩個數進行分組,使得兩個子陣列中,只有乙個數出現一次,其餘的數出現兩次。

分組依據是:異或結果中從右往左第一位為1,以此為界,進行劃分。

假定第n位為1,則所有數中,該位為1的為一組,該位為0的為一組。這樣保證這兩個數分在不同的組中。

實現**:

class solution 

};

面試題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 陣列中只出現一次的數字

題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。這其實是除了有乙個數字外,其它數字都出現兩次的變種。只有乙個數字不同的時候,可以採用異或來做。但此處是兩個不同。書上給出的方法是先異或,得到結果值。然後在結果中,從右往左找到第一位是1的位號。由此考慮將...

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

1.乙個陣列中除了兩個數字之外,其他的式數字都出現了兩次。找出這個兩個只出現一次的數字,要求時間複雜度是o n 空間複雜度是o 1 分析 這種題目剛開始很難相處滿足條件的要求,要求在o n 的時間複雜度還是比較高的,可以先假設陣列中只有乙個數字出現了一次,其他的數字都出現了兩次,如果是這種情況,可以...