题目描述如下:
以下是我的代码过程
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* singleNumbers(int* nums, int numsSize, int* returnSize){
int ret=0;
int x1=0;
int x2=0;
for(int i=0;i<numsSize;++i)
{
ret^=nums[i];
} //ret就是俩消失数字地异或了;
int pose=0;
for(int i=0;i<32;i++)
{
if((ret>>i)&1)
pose=i;
} //找出ret中任意为一的二进制位,准备后续分组,把俩个消失的数分在俩个组中。
for(int i=0;i<numsSize;++i) //进行遍历整个数组并且顺便分组,转化为消失一个数字的题,
{ //不懂消失一个数字的题可以看我上一篇。
if((nums[i]>>pose)&1)
x1^=nums[i];
else
x2^=nums[i];
}
int* arr=(int*)malloc(sizeof(int)*2);
arr[0]=x1;
arr[1]=x2;
*returnSize=2;
return arr;
}
关键;转换为消失一个数字的题,重点在代码中已经做了注释。