这是我们一个学长出的一道题,说一堆数里边只有一个出现奇数次的数,其他都出现偶数次
让你用时间复杂度为On的算法找出这个数。
我看到的一个简单的方法是:
开始定义一个a=0,每输入一个数就跟a异或,即a=a^n(假设输入数的变量是n),这样最后得到的a就是出现奇数次的那个数
仔细想想确实是这样,异或——相同为0,不同为1,注意这个相同和不同是在二进制的层面上来看的,是二进制数的按位异或,
比如2,1,2这三个数,
2^1=00000010^00000001=00000011
转换成十进制就是3
然后3再和2异或就是
3^2=00000011^00000010=00000001,也就是十进制1,是不是很神奇
如果对这个理解了,就有思考题了,如果是有两个出现奇数次的数怎么办?三个呢?