在一个已知数组中,只有一位数只出现一次,其余数均出现两次,如何快速找到这个数。
常规方法,通过一一比较,找出只出现一次的数,代码如下
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0, j = 0;
int arr[10] = {0,1,2,3,0,2,3,1,10};
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (i != j)
{
if ((arr[i] ^ arr[j]) == 0)
{
break;
}
}
}
if (arr[i] != arr[j])
{
printf("%d\n", arr[i]);
}
}
system("pause");
return 0;
}
可以看出来,此代码执行效率低,且代码量大。
通过异或操作符可以大幅度简化这个问题,a^b^a=b,0^a=a;通过这两个式子可以看出来异或操作符的便利之处,实现代码如下
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[] = { 1, 1, 2, 2, 3, 4, 4, 5, 5 };
int size = sizeof(arr) / sizeof(arr[0]);
int n = 0;
for (int i = 0; i < size; i++)
{
n=n^arr[i];
}
printf("%d", n);
system("pause");
return 0;
}
可以发现通过异或位操作大大简化了代码且代码执行效率得到了提高。
本文出自 “qin-wang” 博客,转载请与作者联系!