【发布时间】:2017-01-26 00:15:47
【问题描述】:
我想知道是否可以在 JavaScript 数组上执行 O(log n) 的二进制搜索以找到单个重复元素。
// Example
// Input: var arr = [1, 3, 4, 4, 6, 9, 11, 12, 14]
// Output: 4
我知道如何在线性时间内解决这个问题,但我一直在尝试在 O(log n) 中编写一个解决方案,但我不确定如何在减少要搜索的数组块方面继续进行每次迭代。有什么建议吗?
【问题讨论】:
-
你提前知道 4 是重复的值吗?
-
如果您没有要搜索的特定值,这不能比 O(n) 更快地完成。最坏的情况是没有重复,在这种情况下,您将始终需要查看整个数组。
-
这个类似的问题可能会有所帮助(虽然它不是重复的,因为它的数字是连续的,没有间隙),因为其中一个答案提到了这种情况。 stackoverflow.com/questions/9673658/…
-
如果您肯定有主题中提到的“单个”重复项(元素是单数),即使它们是最后一对,您也绝对可以在不迭代所有项目的情况下找到它。
标签: javascript arrays algorithm big-o