只出现一次的数其他都出现两次

来源:互联网 发布:贵州轩通大数据正规吗 编辑:程序博客网 时间:2024/06/06 02:26

只有一个这样的数

这个问题很简单。直接抑或就好。因为其他的数字都是出现两次的,异或出来是零,那么只有这个数组出来是自己。

有两个这样的数

这个问题不能通过简单的异或处理。那么可以这样分组.如果能把大的数字分成两个组,并且其余的出现两次的数字也都在这一组。那么就分成了两个问题一。。
关键在于如何分组。

我们还是从头到尾依次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他数字都出现了两次,在异或中全部抵消掉了。由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也就是说在这个结果数字的二进制表示中至少就有一位为1。我们在结果数字中找到第一个为1的位的位置,记为第N位。现在我们以第N位是不是1为标准把原数组中的数字分成两个子数组,第一个子数组中每个数字的第N位都为1,而第二个子数组的每个数字的第N位都为0。

现在我们已经把原数组分成了两个子数组,每个子数组都包含一个只出现一次的数字,而其他数字都出现了两次。因此到此为止,所有的问题我们都已经解决。

有三个这样的数

好么。问题又复杂了。
这个问题真的很复杂。自行百度吧

0 0
原创粉丝点击