一尘不染

给定从1到2 ^ 32-1的数字,一个缺失。如何最佳地找到丢失的号码?

algorithm

系统会为您提供2 ^ 32-2唯一编号,范围从1到2 ^
32-1。将所有数字都放入内存中是不可能的(因此不能选择排序)。要求您找到丢失的号码。解决此问题的最佳方法是什么?


假设您不能使用大整数,并且仅限于32位整数。

int通过标准输入传递。


阅读 242

收藏
2020-07-28

共1个答案

一尘不染

主要编辑: 相信我,可以使事情变得比原本要困难得多。

对它们全部进行XOR。

我在这里假设数字是1到2 32-1( 含) 。这应该使用1个32位的额外存储位置。

编辑: 我以为我可以摆脱魔术。呃,好吧。

说明:

对于那些知道汉明代码如何工作的人来说,这是相同的想法。

基本上,对于从0到2 n -1的所有数字,该数字的每个位位置都恰好有2 (n-1)
1s。因此,将所有这些数字进行异或运算实际上应该得到0。但是,由于缺少一个数字,因此该特定列将给出1,因为在该位位置中奇数个数字。

注意: 尽管我个人更喜欢使用**运算符进行幂运算,但是我将我的运算符更改为^,因为这是OP所使用的。不要混淆^的xor。

2020-07-28