【发布时间】:2019-12-25 22:44:41
【问题描述】:
我想找到一个目标值 4 在序列 [1, 1, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6] 中最先出现的位置。当我使用 java.util.Arrays.binaySearch 时,它返回的索引是 9,但我预计是 7。
我看 java.util.Arrays.binaySearch source code
我发现了一些 cmets:
如果数组包含多个具有指定值的元素,则无法保证会找到哪一个。
那么如何在Java中实现一个lower_bound二分查找算法,返回目标值最先出现的地方。
注意:lower_bound这个概念来源于C++,但是我对C++不是很了解。
【问题讨论】:
-
要找到前4个,将4视为大于目标值,将3视为小于目标值。 不要在数组中的值为 4 时提前终止算法。
-
只需向后迭代,直到找到不同的值,存储前一个索引(在算法结束时返回)。
-
@JacobG。最坏的情况,这会导致 O(n) 算法,这违背了二分搜索的目的。
标签: java algorithm binary-search