Первое появление в двоичном поиске

Я возился с кодом и понял то, чего никогда не знал. Обычный двоичный поиск вернет случайный индекс в наборе данных для ключа, который встречается более одного раза. Как я могу изменить приведенный ниже код, чтобы вернуть первое вхождение ? Люди так делают?

//ripped from the JDK
public static int binarySearchValue(InvertedContainer.InvertedIndex[] a, long key) {
    return bSearchVal(a, 0, a.length, key);
}

private static int bSearchVal(InvertedContainer.InvertedIndex[] a, int fromIndex,
                                 int toIndex, long key) {
    int low = fromIndex;
    int high = toIndex - 1;

    while (low <= high) {
        int mid = (low + high) >>> 1;
        long midVal = a[mid].val;

        if (midVal < key)
            low = mid + 1;
        else if (midVal > key)
            high = mid - 1;
        else
            return mid; // key found
    }
    return (low); // key not found. return insertion point
}
21
задан Lazer 18 May 2019 в 22:57
поделиться