一、题目
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
二、题解
对数组进行排序,然后每次比较一对,前后相同,就跳过这对,如果前后不同,则记录该数字,继续按照成对成对的值进行比较,因为已经排好序了,所以数值相同的值都是紧挨着成对出现。
异或方式的解法待补充
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++;
}
}
}
}