一、題目
一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。
二、題解
對數組進行排序,然後每次比較一對,前後相同,就跳過這對,如果前後不同,則記錄該數字,繼續按照成對成對的值進行比較,因爲已經排好序了,所以數值相同的值都是緊挨着成對出現。
異或方式的解法待補充
public static void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {
if (array.length == 0 || array == null) {
return;
}
//num記錄找到數字的個數
int num = 0;
//對數組進行排序,這樣方便依次查找
Arrays.sort(array);
//循環判斷數組中的值
for (int i = 0; i < array.length; i++) {
//如果最後一個數字是單個出現的數字,是特殊情況所以需要單獨判斷下
if (i == array.length - 1) {
num2[0] = array[i];
break;
}
//全部找到時,結束循環
if (num == 2) {
break;
} else {
//如果當前數字和下一個數字值相同,則跳過這對數字
if (array[i] == array[i + 1]) {
i = i + 1;
} else {
//否則開始存儲單個的數字,並用num記錄已經找到的個數
if (num == 0) {
num1[0] = array[i];
} else {
num2[0] = array[i];
}
num++;
}
}
}
}