陣列中只出現一次的兩個數字

2021-09-26 07:27:03 字數 738 閱讀 2642

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。

請寫程式找出這兩個只出現一次的數字。

你可以假設這兩個數字一定存在。

樣例輸入:[1,2,3,3,4,4]

輸出:[1,2]

解決方案:

異或:兩個相同的元素異或

設出現一次的數字分別為x和y

1,先用乙個sum 將整個陣列遍歷一遍同時異或該陣列元素與sum , 最後sum的值就是出現次數為一的那兩個數字

2,看sum哪一位為1,這一位就是x和y不一樣的那一位,得到第k位

3,將整個陣列劃分為兩類數字,一類是第k位為1的,一類是第k為不為1的

第一類就是又x和一些出現次數為二的數字組成,第二類是y和一些出現次數為二的數字組成。

4,將第一類的所有元素異或就得到了x,然後將sum異或上x就是y

public

int(

int[

] nums)

int k =0;

while

((sum>>k&1)

!=1)//最後的k是x和y二進位制表示的第k位不一樣的那一位

int first =0;

for(

int x : nums)

} res[0]

= first;

res[1]

= sum^first;

return res;

}

陣列中只出現一次的兩個數字

我們知道如果出現一次的數只有1個,其餘的都出現了兩次,那麼,直接異或一遍就可以了,但是,此題有2個 所以,異或一遍的結果為x y,即出現一次的兩個數異或的結果,從s x y 0,知道s的某位為1,x與y的在s為1的位不一樣,這樣就可以將數分為兩個集合,與s相同位為1的和s相同位為0的,x與y一定在兩...

陣列中只出現一次的兩個數字 python

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。首先考慮,如果乙個陣列出了乙個數字外,其餘的陣列都出現了偶數次的解法 xor異或方法可以消除偶數出現的數字 將陣列中所有的數字全部異或,得到最後的結果就是出現一次的數字 class solutio...

陣列中只出現一次的兩個數

劍指 offer 56 i.陣列中數字出現的次數 大意 找出陣列中只出現一次的兩個數 其它出現兩次 思路 思路 首先需要知道乙個前置問題 找出陣列中只出現一次的乙個數 其它出現兩次 顯然,對整個陣列進行異或操作即可。那麼,我們是否有可能將本題中的陣列分隔成兩部分呢 不要求連續 答案是肯定的 我們仍然...