在不到 O(n) 的时间内找到(排序的)数组中的重复元素?
Finding the duplicate element in a (sorted) Array in less than O(n) time?
我想知道是否可以在 O(log n) 中对 JavaScript 数组执行二进制搜索以查找单个重复元素。
// Example
// Input: var arr = [1, 3, 4, 4, 6, 9, 11, 12, 14]
// Output: 4
我知道如何在线性时间内解决这个问题,但我一直在尝试用 O(log n) 编写一个解决方案,除非我不确定如何继续将数组块减少到在每次迭代中搜索。有什么建议吗?
只有当您知道您要查找的元素时(或者,更准确地说,如果您在选择轴心时能够分辨出元素在哪一半),二分查找才有效点)。
您的问题中没有任何内容似乎表明您具备这方面的知识,因此,据此,O(n)
是您目前所能做到的最好的。
如果有一些额外的信息,它可能是可能的,比如一个范围内的所有数字都被表示除了一个,或者重复的在特定范围内。
但是,根据目前的信息,情况并非如此。
我想知道是否可以在 O(log n) 中对 JavaScript 数组执行二进制搜索以查找单个重复元素。
// Example
// Input: var arr = [1, 3, 4, 4, 6, 9, 11, 12, 14]
// Output: 4
我知道如何在线性时间内解决这个问题,但我一直在尝试用 O(log n) 编写一个解决方案,除非我不确定如何继续将数组块减少到在每次迭代中搜索。有什么建议吗?
只有当您知道您要查找的元素时(或者,更准确地说,如果您在选择轴心时能够分辨出元素在哪一半),二分查找才有效点)。
您的问题中没有任何内容似乎表明您具备这方面的知识,因此,据此,O(n)
是您目前所能做到的最好的。
如果有一些额外的信息,它可能是可能的,比如一个范围内的所有数字都被表示除了一个,或者重复的在特定范围内。
但是,根据目前的信息,情况并非如此。