Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定一个排序的数字数组,如何找到小于x的数字的大小_Algorithm_Binary Search - Fatal编程技术网

Algorithm 给定一个排序的数字数组,如何找到小于x的数字的大小

Algorithm 给定一个排序的数字数组,如何找到小于x的数字的大小,algorithm,binary-search,Algorithm,Binary Search,可能重复: 如何修改二进制搜索以查找排序数组中小于某个数字的数字数?如果您有一个已排序的数字数组,只需在排序数组usng a中查找项目的插入点即可。插入点的索引为您提供了小于目标数的元素数 在你的评论中,你提出了两个好问题: 如果号码不在列表中怎么办 要处理此问题,请继续搜索,直到找到数字(如果存在)的位置,即当前元素大于x且前一个元素小于x的索引 如果有重复的呢 要处理这个问题,不要在第一次找到元素时停止,而是继续搜索,直到下限和上限相遇。如果遇到一个等于x的值,则将其视为发现一个太

可能重复:


如何修改二进制搜索以查找排序数组中小于某个数字的数字数?

如果您有一个已排序的数字数组,只需在排序数组usng a中查找项目的插入点即可。插入点的索引为您提供了小于目标数的元素数

在你的评论中,你提出了两个好问题:

  • 如果号码不在列表中怎么办
要处理此问题,请继续搜索,直到找到数字(如果存在)的位置,即当前元素大于x且前一个元素小于x的索引

  • 如果有重复的呢

要处理这个问题,不要在第一次找到元素时停止,而是继续搜索,直到下限和上限相遇。如果遇到一个等于x的值,则将其视为发现一个太高的数字,并继续对分。

二进制搜索低于给定数字的最大数字。一旦你有了它的位置,这个位置也直接关系到你感兴趣的计数

这个伪代码应该会让您走上正确的轨道,但我还没有测试它<代码>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.

返回比二进制搜索返回的值的索引小的所有数字。

查找数字并检查索引。

由于这是一个数字数组,而不仅仅是可比较的对象,您可能需要查看。如果数字是均匀分布的,它可以在O(logn)时间而不是O(logn)时间内找到索引。

在这种情况下,BST代表二元搜索树吗?您的标题是“排序数组”,但您在问题中询问了BST?这是作业吗?今天早些时候你不是问了同样的问题吗?我以前问的是一个BST,现在它只是一个排序的数字数组。这不是一个精确的副本。最后一个问题是关于在二元搜索树中查找项目。这个问题是关于在排序数组中查找项的。问题和答案完全不同,不应合并!投票重新打开。可能他指的是使用“二进制搜索树”方法进行排序。问题是数字可能不在数组中,所以我不知道您何时会终止搜索。即使这是一场比赛,我们也可能需要看左边或右边,因为可能会有重复的。为什么要投否决票?这不管用吗?
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