解题思路1:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] FindNumsAppearOnce (int[] array) {
// write code here
int[] result = new int[2];
//存储两个只出现一次数字的异或值,因为其他数字都是两个,所以异或后必然为0
int res = 0;
for(int i = 0 ; i < array.length; i++){
res^=array[i];
}
int compare = 1;
//比较出两个只出现一次数字的不同点
while((res&compare) == 0){
compare<<=1;
}
int a = 0;
int b = 0;
//根据不同点分成两组,每个组中都必然有一个只出现一次的数字
for(int i : array){
if((i&compare)==0){
a^=i;
}else{
b^=i;
}
}
//算法平台的特殊要求
if(a < b){
result[0] = a;
result[1] = b;
}else{
result[0] = b;
result[1] = a;
}
return result;
}
}