【发布时间】:2020-05-11 02:45:48
【问题描述】:
我需要帮助了解什么以及如何在 javascript 中使用哈希映射。我有一个例子 给定一个整数数组,返回两个数字的索引,使它们相加为特定目标。
您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。
有人能分解一下这个 hashmap 解决方案的作用以及为什么它更好吗?此外,如果有人足以给我一个类似的问题来练习,那将非常有帮助。
给定 nums = [2, 7, 11, 15],目标 = 9,
因为 nums[0] + nums[1] = 2 + 7 = 9, 返回 [0, 1]。
我的蛮力解决方案
for (var i = 0; i < nums.length; i++) {
for (var j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
result.push(i);
result.push(j);
}
}
}
return result;
}
console.log(twoSum([2, 7, 11, 15], 9));
HashMapSolution
function twoSumBest(array, target) {
const numsMap = new Map();
for (let i = 0; i < array.length; i++) {
if(numsMap.has(target - array[i])) {
return [numsMap.get(target - array[i], i)];
// get() returns a specified element associated with the specified key from the Map object.
} else {
numsMap.set(array[i], i);
// set() adds or updates an element with a specified key and value to a Map object.
}
}
}
【问题讨论】:
-
一个循环是 O(n),两个嵌套循环是 O(n²) ...
-
第 5 行的结尾 ) 应该在逗号之前。
-
@JonasWilms 如果 OP 不是 HashTable/HashMap 的工作方式...假设 O 表示法的知识是一个延伸...而且循环的数量确实不是复杂性的指示。如果
Map.has只使用线性搜索,那么只有一个外部循环不会改变整体复杂性 - 您的评论可能会导致传播普遍的想法,即函数调用总是 O(1)。跨度>
标签: javascript arrays hashmap maps frontend