我对思考过程比对代码本身更感兴趣。我应该在排序数组中找到 v [i] 组件的数量,以便 x< v [i]< y ,其中 x 和 y 作为键盘输入发送。 我应该使用修改后的二进制搜索来有效地解决这个问题,而不是通过向量进行常规搜索。
我的问题是,在这种情况下,我无法想象如何实现二进制搜索,这种方法似乎不适合我。
有什么想法?
答案 0 :(得分:6)
您可以在数组中对x
和y
进行二进制搜索。然后,您可以从x
的索引中减去y
的索引,以获取它们之间的项目数。
你实际上必须从该结果中减去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
的元素的索引。
答案 1 :(得分:2)
假设原始数组v已排序,请按照以下步骤操作:
答案 2 :(得分:0)
如果您有兴趣,请参阅以下文章:Binary Search
取决于x
和y
的值,如果它们分别是数组中数字的下限和上限,那么它就像应用一般BS一样简单具有这些限制的算法而不是数组的一般第一个和最后一个元素。
在纸上绘图会有所帮助。