Java arrays.binary搜索多个匹配项?

时间:2015-03-22 11:00:49

标签: java arrays binary-search

我需要使用Arrays.binarySearch方法查找排序数组中的所有元素。我想在lowerbound = pos + 1迭代二进制搜索(pos是前一个匹配),但binarySearch不能保证返回第一个匹配(最小匹配索引)?

我该怎么做?

1 个答案:

答案 0 :(得分:4)

您可以轻松使用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++;
}

运行此代码后,firstlast(包括)之间的索引是包含搜索值的所有索引。