1. 程式人生 > >經典演算法-給出2n+1個數,其中有2n個數出現過兩次,用簡便的最方法求出現一次的數

經典演算法-給出2n+1個數,其中有2n個數出現過兩次,用簡便的最方法求出現一次的數

給出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;
}