一、 在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。
例如:
数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5
二、算法思路:
异或运算的特性是:一个数和自身进行异或运算结果为0,一个数和0进行异或运算结果为其本身。
我们可以将数组中的所有数字进行异或运算,出现成对的数字会相互抵消得到0,最后剩下的结果就是只出现一次的数字。
三、以下是求解的步骤:
1. 定义一个变量 num,初始化为0。
2. 遍历整型数组,对每个元素执行异或运算。即 num ^= a,其中 a为数组中的元素。
3. 最后 num 的值就是只出现一次的数字。
四、以下为代码示例:
#include <stdio.h>
int findsiglenumber(int a[], int n)
{
int num = 0;
for (int i = 0; i < n; i++)
{
num ^= a[i];
}
return num;
}
int main()
{
int b[] = { 1,2,3,4,5,4,3,2,1 };
int sz = sizeof(b) / sizeof(b[0]);
int ret = findsiglenumber(b, sz);
printf("%d\n", ret);
}