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的主要内容,如果未能解决你的问题,请参考以下文章
等效于 Javascript 中的 python 范围 [重复]