一个数组(nums)中只有两个数只出现一次,其余数都出现两次,找出出现一次的两个数
//0和数组中全部数字异或得到两个只出现一次的数字的异或值
int ret=0;
for(int i=0;i<numsSize;i++)
{
ret^=nums[i]
}
//找出ret的第m位为1的位
int m=0;
while(m<32)
{
if(ret&(1<<m))
break;
else
++m;
}
//把第m位不同的数字分开异,然后与0异或找出两个数
int x1=0,x2=0;
for(int i=0;i<numsSize;i++)
{
if(nums[i]&(1<<m))
{
x1^=nums[i];
}
else
{
x2^=nums[i]
}
//申请空间返回两个出现一次的数
int* retArr=(int*)malloc(sizeof(int)*2);
retArr[0]=x1;
retArr[1]=x2;
*returnSize=2;
return retArr;
}