經典演算法-給出2n+1個數,其中有2n個數出現過兩次,用簡便的最方法求出現一次的數
阿新 • • 發佈:2019-01-23
給出2n+1個數,其中有2n個數出現過兩次,用簡便的最方法求出現一次的數
思路分析:
列如給定一個數組 array1 [5,2,4,3,5,2,4,10,3] 想要通過最簡單的方式那就是異或了,我們都知道0異或
任何數都是那個數的本身,任何數與自身異或都是0,按照本題的要求,我們可以這樣簡單的分析
假設n與非自身n的任何數異或,比如n 異或了 m,x,y最後異或到了n,那麼最終的結果為m,x,y三個數
所異或的結果,然後m,x,y又去異或其他數,每當異或到與本身相同的數,就相當於去除了本身這個
值了,那這個列子說吧,5異或了2,4,3然後異或了5,最終的結果是2,4,3所異或的結果,其中
就相當於消除了5,依次類推,只要遇到了兩兩相同的數都會依依消除,而任何數與自身相異或都為0
所以,最後根據題意最後的結果就是兩兩相異或為0與出現一次的數異或,也就得到了最後的結果。
程式碼如下:
public int simpleFind(int[] a){
int result = 0;
for(int i = 0; i < a.length; i++){
result ^= a[i];
}
return result;
}