/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param numsLen int nums数组长度
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
#define N 2
int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize ) {
// write code here
int tmp=0;
int i;
//异或出两个不同的数字的结果
for(i=0;i<numsLen;i++){
tmp^=nums[i];
}
//按位取得上述结果为1的位置
int pos=-1;
for(i=0;i<32;i++){
if((tmp&1)==1){
pos=i;
break;
}
tmp=tmp>>1;
}
//得到最终的两个结果
int num1=0,num2=0;
for(i=0;i<numsLen;i++){
if(((nums[i]>>pos) & 1) == 1)
num1^=nums[i];
else
num2^=nums[i];
}
*returnSize=2;
(num1<num2)?(nums[0]=num1,nums[1]=num2):
(nums[0]=num2,nums[1]=num1);
return nums;
}