啦啦啦。。。。。。。
首先我们先找出:数组中只有一个数字出现一次,其余数字都成对出现。实现的方法其时间复杂度为O(1);
使用异或:其数字的二进制位相同为0,不同为1.所有数字都异或,最后的异或结果就是那个只出现一次的数字。
下面是代码实现:
void FindDifference(int arr[],int n)
{
int i = 0;
int s = arr[0];
if(n == 0 || n == 1)
{
return;
}
for(i = 1;i < n;i++)
{
s = s^arr[i];
}
if(s == 0)
{
printf("数组中所有的数字都是成对出现。\n");
}
else
{
printf("单独的数字是:%d\n",s);
}
}
如果数组中有两个数字出现一次,那么。。。。。。。
我们只需要把一个数组分成两个数组,然后一个数组中有一个没有成对出现的数字,让其逐一进行异或,就可以找出只出现一次的数字。下面我们举个例子来促进理解:int[] = {1,2,3,4,1,2};
整个数组异或的结果为:3(0x011)^4(0x100)=7(0x111)(若异或结