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

Joh*_*ang 11 algorithm

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


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

ints通过标准传入.

syk*_*ora 32

主要编辑:相信我会让事情变得更加艰难.

所有这些都是XOR.

我在这里假设的数字是1到2 32 - 1 .这应该使用1位额外的32位内存位置.

编辑:我以为我可以逃脱魔法.呃,好吧.

说明:

对于那些知道汉明码如何工作的人来说,这是一样的想法.

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

注意:虽然我个人更喜欢使用**运算符进行求幂,但我已将我的运算符改为^因为这就是OP所使用的.不要混淆^ for xor.


moo*_*dow 12

使用您最喜欢的大整数库添加您放弃的所有数字,并从算术级数公式之和得到的1到2 ^ 32-1之间的所有数字之和中减去该总数

  • 你甚至不需要一个大的整数库,`ulong`(一个无符号的64位整数)就可以了. (2认同)