[算法很美](位运算_2)找出落单的那个数
二、找出落单的那个数
一个数组里除了某一个数字之外,其他的数字都出现了两次,请写程序找出这个只出现一次的数字
题意:就是再一个数组内,只有一个数字出现一次,其余的都出现两次
这道题若没有看上一期的题解的话,我能想到都又是hash....
但是看了上一章的题解,那么就只需要用异或:同0异1
其中都有两个数的数会相互抵消,而最后的结果将会是只有一个数的数。
为什么会这样呢?例如:二进制0111^0111,得到的结果将会是0,而0异或任何数都会等于那个数本身
代码如下所示:
#include<stdio.h>
int main()
{
int nums[11] = { 1,1,3,3,6,7,7,8,8,10,10 };
int x = 0;
for (int i = 0; i < 11; i++)
x = x ^ nums[i];
printf("%d", x);
return 0;
}
得到的结果为6。
教学视频如下所示: