我的问题是,我在这段代码中没有最快的性能。 我有大约 30 个测试,我必须用这段代码解决,但我只解决了 28 个,直到它抛出错误,因为它花了很长时间。
这是我的示例输入:
queryType: ["insert", "insert", "addToValue", "addToKey", "get"]
query: [[1,2], [2,3], [2], [1], [3]]
If queryType[i] === "insert" -> Add at query[i][0] value query[i][1].
If queryType[i] === "addToValue" -> Add query[i][0] to every value.
If queryType[i] === "addToKey" -> Add offset.
If queryType[i] === "get" -> Add query[i][0] to result value.
这是我当前的代码:
function testHashMap(queryType, query) {
let hash = {};
let result = 0;
let offset = 0;
let len = queryType.length;
for (let i = 0; i < len; ++i) {
let querys = query[i][0];
switch (queryType[i]) {
case "insert":
hash[querys] = query[i][1];
break;
case "addToValue":
for (let key in hash) {
hash[key] += querys;
}
break;
case "addToKey":
offset += querys;
break;
case "get":
result += hash[querys - offset];
break;
}
}
return result;
}
有人知道如何提高此功能的速度吗? 感谢您的宝贵时间!
最佳答案
正如马特·蒂默曼斯 (Matt Timmermans) 在评论中指出的那样,一种加快速度的方法可能不是实际增加每个值。假设我们的起始值为
[1, 1, 1, 1]
现在给每个元素加 3,我们记录一个通用的 offset
,3。
假设我们现在得到一个插入,[2, 4]
。我们想将第三个元素设置为 4,因此我们首先减去我们的偏移量。 4 - 3 = 1 所以我们实际上根本不改变第三个元素!
现在我们被要求获取
索引 2 处的元素。我们添加我们的一般偏移量:
1 + 3 = 4
正如预期的那样。
这样一来,所有更新都保持在 O(1)
时间复杂度,这应该会运行得更快。
关于javascript - 如何提高字典的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57758272/