异或的基本原理:异或是二进制间的位运算,相同为0,不同为1
一个整型数组里,除了一个或者两个或者三个数字之外,其他数字均出现了两次,请找出只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1);
根据异或的特性两个相同的数字异或等于0,而0和一个数字异或等于其本身,所以当进行循环遍历一遍之后得到的结果一定是那个只出现一次的数字。代码实现:
#include<stdio.h>
int main()
{
int n,a[1000],i;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
a[0]=a[0]^a[i];
printf("%d ",a[0]);
}
return 0;
}