import org.junit.Test;
public class solution {
@Test
public void testFunc(){
int[] arr= {2,4,3,6,3,2,5,5};
int[] searchNum = searchNum(arr);
System.out.println("num1: "+searchNum[0]);
System.out.println("num2: "+searchNum[1]);
}
// 数组中除两个数只出现1次外,其他数字均出现两次
public int[] searchNum(int[] arr){
if (arr.length<2) {
return null;
}
int res=arr[0];
for(int i=1;i<arr.length;i++){
res=res^arr[i];
}
int locationIndex = findLocation(res);
int num1=0;
int num2=0;
for(int i=0;i<arr.length;i++){
if (splitIndex(arr[i], locationIndex)==0) {
num1=num1^arr[i];
}
else{
num2=num2^arr[i];
}
}
int[] result = new int[2];
result[0] = num1;
result[1]=num2;
return result;
}
public int splitIndex(int num,int index){
int temp =(num>>index)&1;
return temp;
}
public int findLocation(int res){
int location =0;
int flag = res&1;
while (flag!=1) {
res=res>>1;
flag=res&1;
location++;
}
return location;
}
}