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

2022-09-13 20:21:19 字數 1005 閱讀 7497

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

//

num1,num2分別為長度為1的陣列。傳出引數

//將num1[0],num2[0]設定為返回結果

public

class

solution

//所有array異或後的結果

int temp=0;

for(int i=0;i)

int indexof1=findfirstbitis(temp);

//通過第i位是不是1,將array分為兩個陣列,這兩個陣列分別異或,出現兩次的抵消為0,剩下的就是只出現一次的數字

for(int i=0;i)

else}}

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

private

int findfirstbitis(int

num)

return

indexbit;

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

private

boolean isbit(int num,int

indexbit)

}

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

異或運算的性質:任何乙個數字異或它自己都等於0 。

我們從頭到尾依次異或陣列中的每乙個數字,那麼最終的結果剛好是那個只出現一次的數字,因為那些出現兩次的數字全部在異或中抵消掉了。

針對本題:從頭到尾依次異或陣列中的每乙個數字,最終得到的結果就是兩個只出現一次的數字的異或結果。

這兩個數字不一樣,異或結果不為0 ,它的二進位制表示中至少就有一位為1 。

在結果中找到第乙個為1 的位置,記為第n 位。

現在我們以第n 位是不是1 為標準,把原陣列中的數字分成兩個子陣列,第乙個子陣列中每個數字的第n 位都為1 ,而第二個子陣列的每個數字的第n 位都為0 。

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

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。異或的方法。先考慮乙個簡單一點的問題,陣列裡除了乙個數字以外,其它都出現兩次,找到這個數字。這個題之前遇到過,做法是把陣列裡所有數字異或,最後得到的數字就是只出現一次的那乙個數字。為什麼是這樣呢?因...

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

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。思路 1.利用map,map儲存的是key value對,在這裡key是陣列中的數字,value是陣列中數字出現的次數。遍歷陣列,將數字存入map,那麼map中value為1的兩個數字就是陣列中的...

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

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。class solution 可以用位運算實現,如果將所有所有數字相異或,則最後的結果肯定是那兩個只出現一次的數字異或的結果,所以根據異或的結果1所在的最低位,把數字分成兩半,每一半裡都還有只出現一...