如何修改二进制搜索以查找排序数组中小于某个数字的数字?
答案 0 :(得分:2)
如果你有一个已排序的数字数组,只需找到排序数组中项目的插入点,即binary search algorithm。插入点的索引为您提供小于目标编号的元素数。
在你的评论中,你提出了两个好问题:
要处理此问题,请继续搜索,直到找到数字应存在的点(即当前元素大于x且前一个元素小于x的索引)。
要处理此问题,请不要在第一次找到元素时停止,而是继续搜索直到下限和上限相遇。如果你点击一个等于x的值,就像你找到一个太高的数字并继续平分一样。
答案 1 :(得分:2)
返回小于二进制搜索返回值的索引的所有数字。
答案 2 :(得分:0)
查找号码并查看索引。
答案 3 :(得分:0)
由于这是一个数字数组而不仅仅是可比较的对象,因此您可能需要查看interpolation search。如果数字是均匀分布的,它可以在O(log log n)时间内找到索引,而不是O(log n)。
答案 4 :(得分:-1)
二进制搜索低于给定数字的最大数字。一旦掌握了自己的职位,该职位也与您感兴趣的计数直接相关。
这个伪代码可以让你走上正轨,但我还没有测试过。 k
=给定数字
while left < right
mid = (left + right) / 2
if arr[mid] >= k // too big, not interested
right = mid;
else // maybe too small, try bigger values
left = mid + 1
right - 1 or left - 1 (they're equal) is the position you're after.
例如:8 11 13 20 50
,k = 19
left = 1, right = 5
mid = 3
arr[3] = 13 < 19 => left = 4
left = 4, right = 5
mid = 4
arr[4] = 20 >= 19 => right = 4
left >= right => left - 1 = 4 - 1 = 3 is the position you're after