javascript - JavaScript 的 Map.has() 在计算大 O 时算作循环吗?
问题描述
这是我在这里的第一个问题,我希望我没有违反任何规则。所以,我在这个编程方面还很陌生,现在只做了大约 3 个月。我也在自学数据结构和算法,今天我刚刚开始解决 LeetCode 上的简单问题。
我有一个关于计算专门针对地图的函数的大 O 的问题。
function twoSum(arr, target) {
const len = arr.length;
for (let i = 0; i < len; i++) {
let currVal = arr[i];
let comp = target - currVal;
let firstIndex = arr.indexOf(currVal);
let secondIndex = arr.indexOf(comp, firstIndex+1);
if (secondIndex !== -1) {
return [firstIndex, secondIndex];
}
}
}
所以最初,我在计算 Big O 时只计算了 for 循环,但后来我发现对于这个函数,由于 indexOf,时间复杂度实际上是 O(n^2)。
然后我尝试使用 Maps 解决同样的问题,这样我就不必循环遍历数组两次。
function twoSum(arr, target) {
const indexValues = new Map();
const result = [];
const len = arr.length;
for (let i = 0; i < len; i++) {
let currVal = arr[i];
let comp = target - currVal;
indexValues.has(comp) ? result = [i, indexValues.get(comp)] : indexValues.set(currVal, i);
}
return result;
}
根据我对地图的理解,这个时间复杂度应该是 O(n),但是当我在 LeetCode 上比较这两个函数时,它们的运行时间都是 80 毫秒。那么,长话短说,Map.has() 方法是否因某种原因算作类似于 indexOf 函数的循环?
提前致谢!
解决方案
推荐阅读
- svg - SVG 中的零笔画宽度
- php - 使用服务帐户的 Google Cloud API PHP 客户端身份验证
- oracle - 物化视图的部分刷新
- html - 获取 :after 样式以显示在元素后面
- java - 如何在不处理异常java的情况下防止被零除
- flutter - 如何在 Flutter 中缩小和扩展 Wrap 小部件?
- python - `tiny_malloc_from_free_list` 让我的指针为 `NULL`?
- vba - 在 VBA 中缩短 Like 语句
- authorization - 拒绝在 asmx 上对不在公司的 IP 地址访问某些方法
- c# - 创建 ActionFilter 以排除 WebAPI 中的 NULL 值