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

2021-10-05 02:14:56 字數 815 閱讀 3707

題目描述

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

解決思路

這道題用異或來解決非常巧妙,理解了為什麼這麼做後就有一種毛塞頓開的感覺。

利用「其他數字都出現兩次」的條件,從頭到尾進行異或運算,相同的數異或為0,那麼一趟異或下來所有出現了兩次的數都相互抵消了。異或最終結果的二進位制必定至少有乙個1,因為這兩個只出現了一次的數是不相同的。

從低位開始找,找到這個1的位置flag,利用這個位置,將原陣列分為兩組,每組中只有乙個出現了一次的數。原因是,前面也提到,這個flag位置上這個兩個出現了一次的數乙個是0乙個是1,由此分組。

分兩組後的分別從頭到尾異或,就能找出這兩個數。

時間複雜度

o(n)

**

//num1,num2分別為長度為1的陣列。傳出引數

//將num1[0],num2[0]設定為返回結果

public class solution

int huo = 0;

int flag = 1;

for(int i = 0;i < l;i++)

while((flag & huo) == 0)flag = flag << 1;

num1[0] = 0;

num2[0] = 0;

for(int i = 0;i < l;i++)

}}

Python 異或尋找只出現一次的兩個數

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。例如陣列為,找出7和9。解法1 1 思路 1 對於出現兩次的元素,使用 異或 操作後結果肯定為0,那麼我們就可以遍歷一遍陣列,對所有元素使用異或操作,那麼得到的結果就是兩個出現一次的元素的異或結果。2 因為這...

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

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

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

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。你可以假設這兩個數字一定存在。樣例輸入 1,2,3,3,4,4 輸出 1,2 解決方案 異或 兩個相同的元素異或 設出現一次的數字分別為x和y 1,先用乙個sum 將整個陣列遍歷一遍同時異或該陣列元素與sum...