在少于O(n)的时间内在(已排序的)数组中查找重复元素?

时间:2016-09-18 04:05:30

标签: javascript arrays algorithm big-o

我想知道是否可以在 JavaScript 数组上的O(log n)中执行二进制搜索,以查找单个重复元素。

// Example
  // Input: var arr = [1, 3, 4, 4, 6, 9, 11, 12, 14]
  // Output: 4

我知道如何在线性时间内解决这个问题,但我一直在尝试在O(log n)中编写解决方案,除了我不确定如何在减少要搜索的数组块方面继续每次迭代。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

二进制搜索只有在您知道您正在寻找的元素时才有效(或者,更确切地说,如果您可以分辨出它在哪一半时已经存在选择了你的支点。)

您的问题中没有任何内容似乎表明您具备此类知识,因此,基于此,O(n)是您目前可以做的最好的。

如果有一些额外的信息,则可能会出现一个范围内的所有数字,除了一个,或者副本在特定范围内。

但是,根据目前的信息,情况并非如此。