0

私はJavascriptが初めてで、C++のequal_rangeに似たバイナリ検索機能を含む既存のJavascriptライブラリがあるかどうか疑問に思っていますか? 私が探しているものの簡単な実装を書きました:

/*
 * 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)];
};
4

1 に答える 1

0

Google のクロージャ ライブラリは、これまでに見つけた中で最も近いライブラリである可能性があります。

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

于 2020-07-07T02:28:01.410 に答える