[算法很美](位运算_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。

教学视频如下所示:

本文链接:

https://nullcode.fun/100.html
1 + 2 =
快来做第一个评论的人吧~