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

问题描述

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

对它们全部进行XOR。

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

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

说明:

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

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

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

解决方法

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


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

int通过标准输入传递。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...