代码的空间复杂度是什么?
function double(n) { //Here n is an array
newArr = [];
for (i = 0; i < n.length; i++) {
newArr.push(2 * n[i]);
}
return newArr;
}
答案 0 :(得分:2)
空间复杂度的确是O(N)
,因为空间不取决于程序定义了多少变量,而是取决于程序在运行时最终将占用的最大空间。
将空间复杂度视为程序在运行时产生的内存成本的一个因素。如果应用程序在程序运行期间(在程序开始时)分配了它将需要的所有内存,并且该数量独立于程序中的任何变量,则该因素就是1
,即O(1)
-一个常量,因为它不会改变。
这可能令人困惑,因为您可能想知道为什么简单的程序的空间复杂度为O(N)
,但是在开始时分配1GB
的随机C应用程序只是O(1)
。一切都归结为因素-如果空间取决于程序中的变量,则空间是该变量的因素,否则空间为恒定。
当有人说某个程序是O(1)
空间复杂性而另一个是O(N)
时,不要让它使您感到困惑,但也不要让它愚弄您。 O(1)
并不总是意味着更少的空间,O(N)
也不一定意味着更多的空间。
空间复杂度只是告诉您程序所需的空间量如何取决于程序本身的运行时执行情况。
答案 1 :(得分:1)
由于它有两个变量
newArr
和i
,因此此代码的空间取决于它们。
不仅有两个变量名为newArr
和i
,还有n
个变量名为newArr[0]
,newArr[1]
,newArr[2]
,一直到newArr[n-1]
。空间复杂度是指算法存储量随输入数量而增长的方式。由于您最多将n
个元素推入newArr
中,因此空间复杂度为O(n)
。