如何使用二分查找在已排序的数组中查找相邻数字之间的距离是否大于N?例如:
Input: 2 5 8 11 16
Distance: 4
因此,我们应该得到这两个相邻元素之间的距离(在11和16之间)的答案。
编辑:让我更清楚地解释为什么我想用二分查找来做这件事。
假设输入数组是未排序的。例如:
Input: 11 8 2 16 5
然后您应该对数组进行排序,以查看哪些是相邻的。所以在我们有了一个排序列表之后,使用二分搜索的某种变异方式来查找距离不是最好的方法吗?
如何使用二分查找在已排序的数组中查找相邻数字之间的距离是否大于N?例如:
Input: 2 5 8 11 16
Distance: 4
因此,我们应该得到这两个相邻元素之间的距离(在11和16之间)的答案。
编辑:让我更清楚地解释为什么我想用二分查找来做这件事。
假设输入数组是未排序的。例如:
Input: 11 8 2 16 5
然后您应该对数组进行排序,以查看哪些是相邻的。所以在我们有了一个排序列表之后,使用二分搜索的某种变异方式来查找距离不是最好的方法吗?
在最坏情况下,当所有数字等间隔排列为N
时,您无法使用二进制搜索。
二进制搜索和其他分治算法的思想是,在每个步骤中消除大约一半的剩余范围。当所有项以N
间隔时,每个包含三个或更多连续项的范围都可能包含具有> N
距离的邻居对,因此您不能消除所考虑的两个子范围中的任何一个。最终您将检查每个连续项对,这将花费O(NumItems)
的代价。
话虽如此,由于存在潜在的修剪机会,您可能可以优化一般情况,使其比O(NumItems)
好得多。