劍指offer 數組中只出現一次的數字

題目描述
一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。

這個題很好,以前只做過只有一個數字出現過1次的題目,當時直接異或出結果就可以了.這個題變成了兩個,想到了分組,但是想不好到底如何分,偷偷看了一眼解答明悟

先異或出結果,然後找一位是1的位置作爲區分, 已該位是否爲1對數組進行分組,凡是爲1的異或在一起得出一個結果,爲0的異或在在一起得出結果。這種分法既把單獨的兩個數區分了,又把相同的數分在了一個組,甚好!

代碼如下

public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
        int re = 0;
        //所有進行異或
        for (int i = 0; i < array.length ; i++) {
            re = re ^ array[i];
        }
        //找出第一個1
        int one = 1;
        while((re & one) == 0) one <<= 1;
        for (int num : array) {
            if((num & one) == 0) num1[0] = num1[0] ^ num;
            else num2[0] = num2[0] ^ num;
        }

    }

代碼寫起來其實很簡單的

發佈了142 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章