题目:
给定一个非空数组,除了某个元素,其他元素都出现了两次,找出那个元素
例如:{1,1,2,3,2} 输出 3
{1,2,2,3,3} 输出 1
说明:你的算法应具有线性复杂度,且你不可以使用额外空间来存放数组
思路:此题看似简单,但由于规定不能使用其他数组作缓存变量,故常用的遍历计数法失效了,此时可以使用位运算中的异或运算(^)来实现。
异或运算规则如下:
a^a=0
0^a=a
所以将数组经过一轮异或后,留下的就是只出现一次的数
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[]={2,2,3,4,4,5,5,6,6,7,7,3,8};
int i;
int res=array[0];
for(i=1;i<sizeof(array)/sizeof(int);i++)
{
res=res^array[i];
}
printf("res:%d",res);
return 0;
}
运行结果如下: