Javascript эквивалент equal_range в C ++ - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в Javascript, и мне интересно, существуют ли какие-либо существующие Javascript библиотеки, которые содержат функции двоичного поиска, аналогичные C ++ equal_range? Я написал быструю реализацию того, что ищу:

/*
 * Javascript version of C++ equal_range via lower_bound and upper_bound
 *
 * Input: The array A in ascending order and a target T
 * Output: The tightly bound indices [i, j] where A[i] <= T < A[j] if T exists in A
 * otherwise [-1, -1] is returned if T does not exist in A
 */

let lowerBound = (A, T) => {
    let N = A.length,
        i = 0,
        j = N - 1;
    while (i < j) {
        let k = Math.floor((i + j) / 2);
        if (A[k] < T)
            i = k + 1;
        else
            j = k;
    }
    return A[i] == T ? i : -1;
};

let upperBound = (A, T) => {
    let N = A.length,
        i = 0,
        j = N - 1;
    while (i < j) {
        let k = Math.floor((i + j + 1) / 2);
        if (A[k] <= T)
            i = k;
        else
            j = k - 1;
    }
    return A[j] == T ? j + 1 : -1;
};

let equalRange = (A, T) => {
    return [lowerBound(A, T), upperBound(A, T)];
};

1 Ответ

0 голосов
/ 07 июля 2020

Библиотека закрытия Google может быть ближайшей библиотекой, которую я нашел до сих пор:

https://google.github.io/closure-library/api/goog.array.html

...