56 陣列中只出現一次的數字

2022-08-05 02:42:09 字數 809 閱讀 1679

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

功能測試(陣列中有多對重複的數字;沒有重複的數字;)

邊界測試(陣列小於2)

異或運算

乙個數字與其本身異或,結果為0。即:a^a=0

乙個數字與0異或,結果為其本身。即a^0=a

當只有乙個數出現一次時,我們把陣列中所有的數,依次異或運算,最後剩下的就是落單的數,因為成對兒出現的都抵消了。

依照這個思路,我們來看兩個數(我們假設是ab)出現一次的陣列。我們首先還是先異或,剩下的數字肯定是a、b異或的結果,這個結果的二進位制中的1,表現的是a和b的不同的位。我們就取第乙個1所在的位數(取任意乙個1所在位數都可以,因為代表兩個只出現一次的數該位不同,可以區分開兩個數即可),假設是第3位,接著把原陣列分成兩組,分組標準是第3位是否為1。如此,相同的數肯定在乙個組,因為相同數字所有位都相同,而不同的數,肯定不在一組。然後把這兩個組按照最開始的思路,依次異或,剩餘的兩個結果就是這兩個只出現一次的數字。

class solution

*num1 = 0;

*num2 = 0;

for(int i=0;i乙個陣列除了乙個數字只出現1次,其他的數字都出現了三次,請找出只出現1次的數字。

功能測試(唯一只出現1次的數字分別為0、正數、負數;重複出現3次的數分別是0、正數、負數)

特殊輸入測試(小於四個元素)

56 陣列中只出現一次的數字

牛客網 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次,找出這兩個數。兩個相等的元素異或的結果為 0,而 0 與任意數 x 異或的結果都為 x。對本題給的陣列的所有元素執行異或操作,得到的是兩個不存在重複的元素異或的結果。例如對於陣列 x,x,y,y,z,k x x y y z k 0 y ...

陣列中只出現一次的數字

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列大小。2 n 10 6。第二行包含n個整數,表示陣列元素,元素均為int。輸...

陣列中只出現一次的數字

來自劍指offer 分析 如果整型陣列中只有乙個數字出現一次,我們只需將陣列中每個元素依次做異或操作,最終就得到了只出現一次的數字。因為自己與自己異或後,結果為0.現在,陣列中有兩個數字只出現一次,上述一次遍歷後將所有元素異或得不到那兩個數字。因此,我們試著將原陣列分成兩個子陣列,使每個子陣列中分別...