简单函数的大O

问题描述

我正在学习数据结构,对这个游戏还很陌生。我知道运行 n 次迭代的单个循环的时间复杂度为 O(n)。但是如果我在 for 循环中使用 splice ,它的时间复杂度是 O(n2) 吗?我很肯定它是 O(n2) 但想确定一下。

这是我正在处理的示例代码

var createTargetArray = function(nums,index) {
    let target = []
    for (let i=0; i< index.length; i++){
        let idx = index[i]
        target.splice(idx,nums[i])
    }
    return target
};

解决方法

你说得对。 拼接方法的最坏情况应该是 O(n)。 该调用发生在 foreach 循环 O(n) 的迭代中; 所以整个脚本的大 o 符号是 O(n^2)

,

由于大 O 表示法是询问您的函数需要多少次迭代才能对您的数组执行 f(x) 作为输入,因此当您遍历所有元素时,O(n) 的一般时间复杂度。然而,在 JavaScript 中使用 .splice() 函数在理想情况下也具有 O(n) 的时间复杂度,因此当您将 O(n) 放入另一个 O(n) 时,它实际上变为 O(n^2)。作为一个很好的经验法则,您可以考虑嵌套 O(n) 将 n 的幂增加 1 。例如,如果您要循环使用三重嵌套循环对数组的每个元素执行 1 次操作,它将变为 O(n^3),依此类推。