- 题目描述:有一组数据保证只有一个数字出现一次,其余数字出现两次,找出这个只出现一次的数字
最容易想到的就是通过两次通过两次循环枚举出每一个数字是否有相同的存在,但这样时间复杂度太大,为O(n2)
然而我们可以通过 异或运算 来解决这道题
#include <stdio.h>
#include <stdlib.h>
void solve(int arr[], int len)
{
int result = arr[0]; //默认数据小于int的最大值
for(int i = 1; i < len; i++)
{
result ^= arr[i];
}
printf("%d\n", result);
}
int main()
{
int arr[] = {32, 65, 76, 23, 32, 56, 76, 65, 56};
int len = sizeof arr / sizeof arr[0];
solve(arr, len);
}
输出23
- 其原理,相同的两个数异或为 0,与所用的数字异或完后,最后只剩出现一次的数字