找到一个缺失的整数,给出40亿个未排序的整数

时间:2014-04-01 00:53:10

标签: java algorithm types

我遇到了这些面试问题,我试图了解如何解决这个问题。我在SO上阅读了this个问题。我理解帖子的作者的方法,但是我不理解接受的答案中建议的方法。所以我转到了blog。根据这个博客,我们可以计算每个位位置的零和1的数量,从中我们可以找出丢失的数字。但那时文件应该有2 ^ 32-1个数字,大于40亿。那个方法应该不对吗?我确信我的理解有问题,但我无法弄清楚缺失的环节。

2 个答案:

答案 0 :(得分:1)

如果你有一个完整的"数字序列从0到2 ^ N-1然后在每个比特位置设置的比特数将相等(并且等于(2 ^ N)/ 2)。

如果只丢失一个数字,那么它的1位对应于一位数短的位位置。

请注意,这仅适用于2的幂,但可能有一个可以为" odd"计数。

答案 1 :(得分:0)

  • 使用long
  • 添加整数
  • 从(N + 1)*(N + 2)/ 2中减去结果,其中N是文件中的整数数。结果是您缺少号码

示例:

  • 文件包含1,3
  • sum = 4
  • N = 2,所以(N + 1)(N + 2)/ 2 =(2 + 1)(2 + 2)/ 2 = 6
  • -6-总和= 6-4 = 2
  • 2是您的遗失号码