【发布时间】:2016-06-22 06:09:16
【问题描述】:
我需要使用Arrays.binarySearch 方法查找排序数组中的所有元素。我想在lowerbound = pos + 1 中迭代二分查找(pos 是前一个匹配项),但binarySearch 不保证返回第一个匹配项(最小匹配索引)?
我该怎么做?
【问题讨论】:
标签: java arrays binary-search
我需要使用Arrays.binarySearch 方法查找排序数组中的所有元素。我想在lowerbound = pos + 1 中迭代二分查找(pos 是前一个匹配项),但binarySearch 不保证返回第一个匹配项(最小匹配索引)?
我该怎么做?
【问题讨论】:
标签: java arrays binary-search
您可以轻松地使用binarySearch 的结果来获取所有匹配项:
long[] sortedArr = ...
int index = Arrays.binarySearch (sortedArr, value);
int first = index;
int last = index;
if (index >= 0) {
while (first > 0 && sortedArr[first-1] == value)
first--;
while (last < sortedArr.length - 1 && sortedArr[last+1] == value)
last++;
}
运行此代码后,first 和 last(含)之间的索引都是包含搜索值的索引。
【讨论】: