題目描述
一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。
這個題很好,以前只做過只有一個數字出現過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;
}
}
代碼寫起來其實很簡單的