是否为每个删除的值添加一个值仍保持不变的空间?

时间:2019-07-14 23:48:41

标签: big-o space-complexity

让我们以这个无意义的函数为例。我为从旧数组中删除的每个值向新数组中添加一个值。最后,除了使用空数组外,内存使用量还将产生一个参数数组长度的数组。是否认为O(1)空间复杂度?

const constantSpace = (array) => {
    const newArray = [];

    let i = 0;

    while (i < array.length) {
       newArray.push(array.pop());
    }

    return null;
}

2 个答案:

答案 0 :(得分:0)

空间复杂度为O(N),其中N是数组的长度。

一种查看方式是:如果将array的长度从10更改为10,000到10,000,000,表示该数组的内存将发生变化吗?答案是肯定的,随着array的长度增加,您的内存使用量将线性增加。

取决于arraynewArray的语言和实际数据类型(它们是静态分配的数组,还是随时间增长和收缩的动态大小的数据结构?),最终会导致总可用数组长度在N2 * N之间的某个位置(如果您将array.length + newArray.length加起来)。如果原始array在删除元素时没有缩小,则最终将有2 * N个数组元素总数。

要使空间复杂度为O(1),那将类似于存储一个值的单个整数变量。您可以连续向其写入10个不同的值或10,000,000,并且所需的内存不会更改。

答案 1 :(得分:0)

即使您在“计算”末尾丢弃了临时内部数组,并且“结果”的内存大小是恒定的,您的代码仍需要空间才能使该数组运行完成,因此内存复杂度您的功能仍然是O(N)