先对数组进行排序,然后定义两个指针变量q和p,初始化:q = 0,p = q + 1;
对数组进行while循环遍历,当p和q所指的元素相等时,两个指针变量一次移动两步,当p和q所指的元素不相等时,q所指的就一定是那个出现一次的变量,然后此时这两个指针变量改为移动一步,当q所指的位置是元素末尾而p已经是超出数组范围时,此时q所指的元素也是一次出现的。

    public int[] FindNumsAppearOnce (int[] array) {
        // write code here
        if(array == null){
            return null;
        }

        Arrays.sort(array);


        int q = 0;
        int p = q + 1;

        int[] res = new int[2];
        int i = 0;
        while (p < array.length){

            if (array[p] == array[q]){

                p = p + 2;
                q = q + 2;
            }else {

                res[i++] = array[q];
                p = p + 1;
                q = q + 1;
            }

            if (p == array.length && q == array.length - 1){

                res[i] = array[q];
            }
        }

        return res;
    }