【发布时间】:2017-08-23 17:55:03
【问题描述】:
最近,我在一次采访中被问到以下问题。
Q : 给定一个 N 个整数,其中只有一个是重复的,找出那个重复的数。
我回答了一个解决方案,该解决方案将数字存储在哈希图中,并通过检查是否存在密钥来查找重复项。
他接着说如果数据集非常大,大到不能像连续流一样存储在内存中怎么办?
这有点难倒我。有人可以提出一些答案吗?另外,对于原始问题,除了哈希图之外,还有更有效的解决方案吗?
TIA
【问题讨论】:
-
" 有人可以提出一些答案吗?另外,对于原始问题,除了哈希图之外,还有更有效的解决方案吗?"不是 StackOverflow 的合适问题。这是一个有趣的问题,但它更适合讨论论坛而不是问答网站。见help center。也就是说,您是否想过为每个数字存储一位,并检查该位是否已设置?这样,您可以记录数量等于可用可用内存字节数的 8 倍的数字。
java.util.BitSet支持 2^31-1 数字,但您可以构建支持更多数字的东西。 -
地图不太合适
-
既然我们知道只有一个重复,我相信我们可以在看到重复的那一刻退出程序(尽管流中可能有更多数字),对吧?
-
@KedarMhaswade 当然可以,但关键是你怎么知道这个数字是重复的......
-
@shole,只是试图澄清要求。这是一个面试问题,所以应该问清楚的问题。
标签: java algorithm stream hashmap large-data