先对数组进行排序,然后定义两个指针变量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; }