一道趣题
给你n个数,其中有且只有一个数是奇数,求这个奇数。。。。
数据要求\(O(n)\)
想了一会。。。。想不到严格的确定算法,
正解,所有数全部异或一遍,答案就是异或值。。。。
妙不可言,
异或同一个数两次相当于没异或这个数,真的妙。
现在,当仅有两个奇数时呢。。。。。
要求严格\(O(n)\)
我还是不会。。
公布解答:
前面根据第一道问题,已经知道在第二道问题中我们可以通过异或所有的元素得到a^b。
再因为a和b不等,那么a^b必然不为0。
那么a^b这个数上面必然能够找到一个二进制位是1,在这个二进制位上,a和b不等。
根据这个二进制位,将各元素中在这位上为1的分派到左边,为0的分派到右边,形成两个子数组。可以证明,1)这两个数组分别包含a和b。2)每个数组中除了a或b之外的所有元素都是成对出现的。
自此,问题归约为第一个问题。
原帖
(需要访问外网)
其中探讨的确实很有趣。

浙公网安备 33010602011771号