找出出現奇數次的數

2021-07-04 15:55:35 字數 480 閱讀 1380

題目

給你n個數,其中有且僅有乙個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那乙個數。

給你n個數,其中有且僅有兩個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那兩個數。

答案

從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。這是因為異或有乙個神奇的性質:兩次異或同乙個數,結果不變。再考慮到異或運算滿足交換律,先異或和後異或都是一樣的,因此這個演算法顯然正確。

從頭到尾異或一遍,你就得到了需要求的兩個數異或後的值。這兩個數顯然不相等,異或出來的結果不為0。我們可以據此找出兩個數的二進位制表達中不同的一位(即找出所有結果的二進位制形式中的為1的位),然後把所有這n個數分成兩類,在那一位上是0的分成一類,在那一位上是1的分到另一類。對每一類分別使用前乙個問題的演算法。

找出出現奇數次數的數

function findodd a else for var i 0 iif hash i 2 for var i 0 iif map i 2 function dotest a,n test.describe example tests function 剛開始學js,還只是知道怎麼解,不太會靈...

列印出出現奇數次的整數

1 題目 給定乙個整數陣列aar,其中只有兩個數出現了奇數次,其他的數都出現了偶數次,找出這個數。例如 aar 1,5,1,5,2,6,4,6 返回2,4 2 要求 要求時間的複雜度為o n 額外的空間複雜度為o 1 3 解答 1 首先可以知道整數k和0異或的結果為k,整數k和k異或的結果為0,這是...

C 找出出現最多的數

編寫乙個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數n也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值列印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只列印比較小的那個值。輸入格式 第一行是乙個整數n 接下來有n行,每...