【发布时间】:2018-10-19 09:16:26
【问题描述】:
据我所知,Javascript 中的对象就像一个哈希(关联数组)。因此,我认为当我通过像 obj['a'] 这样的 Object 中的键获取值时,无论obj 中有多少键,时间复杂度都将始终为 O(1)。然而,一位面试官就此向我提出质疑。
他给了我一个问题:find the intersection between two unsorted arrays (no duplicate)。
我的解决方案是遍历第一个数组并为每个元素创建哈希,然后循环第二个数组,如果第二个数组中的元素在哈希中,则将其推送到输出。
代码如下:
function findIntersection(ary1, ary2) {
var hash = {};
var output = [];
ary1.forEach((v) => {
hash[v] = true;
});
ary2.forEach((v) => {
if (hash[v]) {
output.push(v);
}
});
return output;
}
我解释了复杂度是O(m+n),m 和 n 是输入数组的长度。但面试官似乎不同意这一点。他一直问你确定hash[v]得到一个值是O(1),告诉我Javascript是如何实现hash[v]的。
hash[v] 的时间复杂度不是 O(1) 吗?如果不是,如何使用正确的哈希结构重写我的代码以实现线性时间复杂度?
这打击了我学习 Javascript 的基础。
【问题讨论】:
-
也许他想让你使用
Map对象 -
Map对象时间复杂度是 O(logn) 对吧?
标签: javascript