找出重複兩次的數--有且只有一個數字重複兩次,其餘都不重複
阿新 • • 發佈:2018-11-24
問題描述:數字範圍是0-99的整數,給出101個整數,其中只有一個是重複兩次的數,找出這個數
分析:如果是有序的話,遍歷一次就可以找出
方法一
:先排序,再遍歷,遍歷超過一次
方法二
:只是排序,排序過程中對於元素相等這一特殊情況拿出來判斷,直接返回相等的這個元素,
方法三
:使用亦或運算子 ^ ,這個也是剛瞭解到的,遍歷一次
相同數字 亦或一次 結果是 0
不同數異或一次,結果是 1 (二進位制按位亦或)
異或:先將資料轉為二進位制數,然後進行按位異或
比如數字 1^3
十進位制 1 對應二進位制 0001
3 對應二進位制 0011
異或結果:2 <———— 0010
表面上看來就是:相同數字異或一次得0 ,再異或一次該數字得到 該數字
1^1^1=0^1=1
回到這個問題:
不難發現 0^1^2^3……^100=100 (這裡一共101個數字,異或了100次)
如果沒有重複(加粗是上一等式括號的結果)
=(1^2)^3……^100
=(3^3)^4^5………^100
=(0^4)^5^6……^100
=(4^5)^6^7……^100
………………
=100
假設重複數字位k,
那麼 (0^1^2^……^100)^100=0
0^k=k
即 (0^1^2^……^100)^100^k=k;
注意:異或的結果是與順序無關的
程式碼實現:
int findrep(int a[]) { int temp=0; for(int i=0;i<101;i++) { temp=temp^a[i]; } return temp^100; }
原文作者:https://blog.csdn.net/qq_36922927/article/details/80753400