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

Java arrays.binary search multiple matches?

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

我该怎么做?

您可以轻松使用 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(含)之间的索引都是包含搜索值的索引。