(Java)数组中只出现一次的数字

一、题目

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

二、题解

对数组进行排序,然后每次比较一对,前后相同,就跳过这对,如果前后不同,则记录该数字,继续按照成对成对的值进行比较,因为已经排好序了,所以数值相同的值都是紧挨着成对出现。

异或方式的解法待补充

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++;
                }
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章