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

2021-08-21 22:32:10 字數 863 閱讀 1790

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

思路:1.利用map,map儲存的是key-value對,在這裡key是陣列中的數字,value是陣列中數字出現的次數。

遍歷陣列,將數字存入map,那麼map中value為1的兩個數字就是陣列中的兩個只出現了一次的數字。

class solution 

if(index.size() != 2)

return;

*num1 = data[index[0]];

*num2 = data[index[1]];

}};

2. 異或

根據題意,陣列中有兩個數字只出現了一次,其他數字出現了偶數次,那麼從頭到尾,陣列中的數字依次進行異或運算,最終的結果剛好就是那兩個只出現了一次的數字的異或結果。

然後再想一下,如果陣列中只有乙個數字出現了一次,其他數字都出現了偶數次,那麼從頭到尾異或的結果就是這個只出現了一次的數字。

所以我們可以把陣列分為兩個子陣列,每個子陣列都包含乙個只出現了一次的數字,子陣列中其他的數字都出現了偶數次,分別對兩個子陣列從頭到尾異或,最終的兩個異或的結果就是這兩個只出現了一次的數字。

那麼怎麼對陣列進行劃分呢?

由於這兩個數字不同,所以異或的結果不為0,也就是其二進位制表示中至少含有乙個1;從異或結果的最低位開始找,找到第乙個1出現的位置,記為第n位;然後依據陣列中數字的第n位是否為1,可以將陣列劃分為兩個子陣列,且每個子陣列都只包含了乙個出現了一次的數字,其他的數字都出現了偶數次。

注意程式中 == 的優先順序高於 &。

class solution 

}};

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

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

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

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

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

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。classname solution description todo date 2019 12 22 12 41 author sonnsei public class solution else if m...