乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。
//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所在的最低位,把數字分成兩半,每一半裡都還有只出現一...