哈希映射要按时间范围键入键的对象的最有效方法?

时间:2018-11-16 22:41:49

标签: javascript dictionary time hash

示例对象:

{
    "start": "1.06",
    "end": "2.33",
    "content": "something"
},
{
    "start": "2.99",
    "end": "3.54",
    "content": "something else"
}

我想创建一个高效的哈希映射,可以随时输入并获取内容。例如,我输入2.01并得到something,因为那是在那个时间范围内发生的。

除了创建范围内每个数字的哈希以外,什么是最好的方法?

1 个答案:

答案 0 :(得分:2)

假设没有重叠的时间段,并且数据已经排序,则应实施二进制搜索:

function findIndex(data, time) {
    let left = 0;
    let right = data.length-1;
    while (left <= right) {
        const mid = (right + left)>>1;
        if (time > data[mid].end) {
            left = mid + 1;
        } else if (time < data[mid].start) {
            right = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;
}

当没有匹配项或匹配项的索引时,它将返回-1。使用该索引,您可以获取匹配的对象及其属性之一。

时间复杂度为 O(logn)

注意:您需要将开始/结束属性定义为 数字 ,而不是字符串,因此您将获得数字比较结果,而不是字母比较结果。< / p>