C 利用二进制搜索算法
我对思考过程比对代码本身更感兴趣。我应该找到排序数组中v[I]组件的数量,这样xC 利用二进制搜索算法,c,algorithm,C,Algorithm,我对思考过程比对代码本身更感兴趣。我应该找到排序数组中v[I]组件的数量,这样x
有什么想法吗 您可以在数组中对
x
和y
进行二进制搜索。然后你可以从y
的索引中减去x
的索引,得到它们之间的项目数
实际上,您必须从结果中减去1,因为您使用的是严格小于
例如,假设您有一个数组:
[3, 6, 8, 10, 14, 39, 41, 100]
设x=8,y=39
x的指数是2,y的指数是5
5-2=3
3-1=2
如果允许
x
和y
为数组中不包含的值,则仍然可以采用相同的方法。搜索x
,如果未找到,则使用刚好大于x的元素索引。同样,对于仅小于y
的元素索引,假设原始数组v已排序,只需执行以下步骤:
如果您感兴趣,这里有一篇很棒的文章: 根据
x
和y
的值,如果它们分别是数组中数字的下限和上限,则只需应用具有这些限制的常规BS算法,而不是数组的常规第一个和最后一个元素
把它写在纸上会有帮助。数组
v
排序了吗?是的,我忘了提了,非常感谢!只需找到节点v[i]
,然后转换树墙,如果x和y不在数组中怎么办?@user43389您必须找到最接近的上方(x
)和下方(v[i]
)。一旦你找到了一个极限,你就可以用它来搜索另一个极限。知道了,非常感谢,我不太确定如何进行编码部分,但我想不会那么难。非常感谢@user43389如果你知道如何进行二进制搜索,那完全是一样的。只需使用两个不同的值调用二进制搜索函数两次,x
和y
。然后减去指数。