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

2021-10-03 05:25:05 字數 905 閱讀 2575

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

第一步對陣列進行異或,最後剩下的是出現一次的兩個數字異或的結果。這個結果二進位制中的1,表示a和b的不同的位。

第二步獲得第乙個1所在的位數,記做index。

第三步把原陣列按照第index位是否為1分成兩組。如此,兩個不同的數會被分到不同組中。然後把這兩個組依次異或,最後的兩個結果就是這兩個只出現一次的數字。

方法一:用set實現

public

void

(int

array,

int num1,

int num2)

else

} num1[0]

=(int) set.

toarray()

[0];

num2[0]

=(int) set.

toarray()

[1];

}

方法二:異或

public

void

(int

array,

int num1,

int num2)

int bit =0;

//從頭開始,兩兩異或

for(

int i =

0; i < array.length; i++

)//找到第乙個1所在的位置

int index =0;

while((

(bit &1)

==0)&& index <=32)

for(

int i =

0; i < array.length; i++

)else

}}

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

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

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

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

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

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