一个整型数组 nums
里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
示例 1:
输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]
int* singleNumbers(int* nums, int numsSize, int* returnSize)
{
int n=numsSize;
int count=nums[0];//nums中所有元素异或出的值
int j=0;//移动的位数
int i=0;
int x=0,y=0;
static int array[2]={0};//使用static静态局部变量,防止函数结束后array数组被释放
for(i=1;i<n;i++)
{
count^=nums[i];
}
while(1)
{
if(((count>>j)&1)==1)//==的优先级高与&,因此必须加括号
{
break;
}
j++;// 右移j位不同
}
for(i=0;i<n;i++)
{
if(((nums[i]>>j)&1)==1)
{
x^=nums[i];
}
else
{
y^=nums[i];
}
}
*returnSize=2;
array[0]=x;
array[1]=y;
return array;
}
原文:https://blog.51cto.com/u_15153653/2766489