通過異或找出不重複出現的數字

2021-07-25 17:12:35 字數 811 閱讀 7812

乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次。

找出這兩個數字,程式設計實現。

想要完成該題目的要求首先要有明確的思路:

1、用異或實現。因為異或簡單快捷。

2、先將所有的陣列元素逐個異或,所得到的結果為兩個只出現一次的數字異或之後的結果並存入result中(出現兩次的數字異或之後結果均為0)。

3、再通過標誌位flag的左移操作將result中的乙個1的位置找出,因為兩數相異或的結果為1所在的位,在該位兩數的二進位制必然不同。

4、最後再通過flag迴圈遍歷陣列將陣列分成兩組,即通過flag為1的那個二進位制位將陣列裡只出現一次的兩個數字分開。(相同的數字必然出現在同一組)

具體實現:

#include#include#includevoid foundnums(int* num,int len)

while (result)

flag <<= 1;

} for (i = 0; i < len; i++) //將num中的所有數字分兩組 即通過if和else將date1和date2分開

else

}printf("%d %d",date1,date2 );

}int main()

; int len = sizeof(num)/sizeof(num[0]);

foundnums(num,len);

return 0;

}

結果:

演算法(一) 求集合中重複出現或者不重複出現的數值

求法一 利用異或 兩個相同的數進行異或,結果為0 將集合中所有的元素進行異或運算,得到的結果為最終的唯一重複的數或者唯一不重複的數,原因 a b c d a c b a a b b c c d d,例子 乙個集合中只有乙個數是只出現一次,其他數出現兩次 public intsinglenumber ...

統計 去重,找出重複,出現次數最多的字母

只找到是哪幾個重複的元素 const finddup list return result 找到重複的元素,並得到有幾個 1 使用reduce方法,reduce本來就有統計的含義 const finddupsnumber list else return total 1 直接遍歷,結果陣列沒有,存入...

找出數字中唯一乙個出現奇數次數的數字,異或

輸入一行數字,其中有且只有乙個數字出現了奇數次,其餘數字均出現偶數次,找出該數字並輸出 從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。因為,兩次異或同乙個數,結果不變,且異或運算滿足交換律。include includeusing namespace std int main cout f...