让我们以这个无意义的函数为例。我为从旧数组中删除的每个值向新数组中添加一个值。最后,除了使用空数组外,内存使用量还将产生一个参数数组长度的数组。是否认为O(1)空间复杂度?
const constantSpace = (array) => {
const newArray = [];
let i = 0;
while (i < array.length) {
newArray.push(array.pop());
}
return null;
}
答案 0 :(得分:0)
空间复杂度为O(N),其中N
是数组的长度。
一种查看方式是:如果将array
的长度从10更改为10,000到10,000,000,表示该数组的内存将发生变化吗?答案是肯定的,随着array
的长度增加,您的内存使用量将线性增加。
取决于array
和newArray
的语言和实际数据类型(它们是静态分配的数组,还是随时间增长和收缩的动态大小的数据结构?),最终会导致总可用数组长度在N
和2 * N
之间的某个位置(如果您将array.length
+ newArray.length
加起来)。如果原始array
在删除元素时没有缩小,则最终将有2 * N
个数组元素总数。
要使空间复杂度为O(1),那将类似于存储一个值的单个整数变量。您可以连续向其写入10个不同的值或10,000,000,并且所需的内存不会更改。
答案 1 :(得分:0)
即使您在“计算”末尾丢弃了临时内部数组,并且“结果”的内存大小是恒定的,您的代码仍需要空间才能使该数组运行完成,因此内存复杂度您的功能仍然是O(N)
。