Javascript 等效于 C++ 中的 equal_range

Posted

技术标签:

【中文标题】Javascript 等效于 C++ 中的 equal_range【英文标题】:Javascript equivalent of equal_range in C++ 【发布时间】:2020-06-18 16:09:04 【问题描述】:

我是 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)];
;

【问题讨论】:

您的意思是按升序排序吗? js有排序方法 我知道 Array.prototype.sort(),但是,这不是我的问题。我正在寻找二进制搜索函数来调用已经排序的输入数组。 【参考方案1】:

Google 闭包库可能是迄今为止我发现的最接近的库:

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

【讨论】:

以上是关于Javascript 等效于 C++ 中的 equal_range的主要内容,如果未能解决你的问题,请参考以下文章

C 编程语言等效于 C++ 中的结构初始化

等效于 Javascript 中的 python 范围 [重复]

NSTimer 等效于 Javascript

jQuery 中的 C++ memset() 等效项

System.arraycopy() 等效于 C、C++ 或 Objective-C

PHP等效于JavaScript getTime() [重复]