我应该如何使用二进制搜索来查找排序数组中邻居数之间的距离是否大于N?例如:
Input: 2 5 8 11 16
Distance: 4
所以我们应该得到答案,邻居之间存在这样的距离。 (11到16之间)
编辑:让我更清楚为什么我想用二分搜索来做这件事 假设INPUT数组未排序。例如:
Input: 11 8 2 16 5
然后你应该对数组进行排序以查看哪些是邻居。所以在我们得到一个排序列表之后不是找到二进制搜索突变的距离的最佳方法吗?
答案 0 :(得分:0)
你(我,我)不会:二进制搜索需要一个排序列表,你将花费更多的时间来排序这个列表(按照距离排序的相邻项目对),而不是扫描列表。
答案 1 :(得分:0)
在最糟糕的情况下,当N
处所有数字的间距相等时,您无法使用二进制搜索。
二进制搜索和其他分治算法的想法是,您在每一步消除大约一半的剩余范围。当所有项目间隔为N
时,三个或更多连续项目的每个范围都可能包含一对距离为> N
的邻居,因此您无法消除下两个子范围中的任何一个考虑。您最终将检查每一对连续项目,花费您O(NumItems)
。
尽管如此,由于潜在的修剪机会,您可以优化一般案例,使其比O(NumItems)
做得更好。