public class Solution { public void swap(int[] a, int l, int r){ int o = a[l]; a[l]=a[r]; a[r]=o; } public int[] FindNumsAppearOnce (int[] array) { // write code here int[]a=new int[2]; int x=array[0]; //将数组中所有数字做异或处理 //由于相同数字异或结果为0,0与数字x异或的结果为x //所以最终的结果为单独出现的数字的异或结果 for(int i=1;i<array.length;i++){ x^=array[i]; } int m=1; //两个单独出现的数字若在m位相异,则在x中第m位为1 //找到这样的m位 while ((m&x)==0){ m=m<<1; } //根据第m位的值将原数组分为两组,单独出现的两个数字分在不同的组 for(int i:array){ if((m&i)==0){ a[0]^=i; }else { a[1]^=i; } } if(a[0]>a[1]){ swap(a,0,1); } return a; } }