示例对象:
{
"start": "1.06",
"end": "2.33",
"content": "something"
},
{
"start": "2.99",
"end": "3.54",
"content": "something else"
}
我想创建一个高效的哈希映射,可以随时输入并获取内容。例如,我输入2.01
并得到something
,因为那是在那个时间范围内发生的。
除了创建范围内每个数字的哈希以外,什么是最好的方法?
答案 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>