【发布时间】:2011-12-16 10:12:03
【问题描述】:
这个问题的存在只是因为纯粹的好奇。不是家庭作业。
找到在数组 1..n 中找到两个缺失数字的最快方法
所以,在相关帖子中:Quickest way to find missing number in an array of numbers 我发现你可以通过加总和减去总数来很快地做到这一点。
但是 2 个数字呢?
所以,我们的选择是:
- 顺序搜索
- 总结项目,从总数中减去 1..n 中的所有项目,然后搜索所有可能的情况。
还有什么? 可能有 O(n) 解决方案? 我在其中一个网站的 ruby 部分发现了这一点,但可以考虑任何语言(除非语言有一些特定的东西)
【问题讨论】:
-
您可以简单地对数组进行排序,这可以在 O(n log n) 中完成。之后,您可以遍历已排序的数据并检测数字 i 是否为 n+1。这将添加另一个 n,但仍会在 O(n log n) 中。
-
-1。你的问题不清楚。数组 1..n 中缺少数字是什么意思(可能您的意思是
(1..n).to_a)?它不包括所有这些吗?如果链接上有一些细节,它仍然没有帮助。您需要在这里清楚地陈述问题。 -
“最快”定义不明确。最快的算法和可能最快的 Ruby 实现,重复:stackoverflow.com/questions/3492302/…。最佳红宝石高尔夫球手:可能是 steenslag 的答案。