我试图找到以下代码的空间复杂性:
void f(int arr[], int n){
int m=0;
for(int i=1; i<n*n; ++i)
for(int k=0; k<n*n; k+=i){
m=(m>k)?m:k;
printf("1");
}
free(malloc(m));
}
答案是n ^ 2,但我不太清楚内存分配在这里是如何工作的。我的意思是,为什么我们把malloc放在免费的里面?并不意味着我们根本不会分配任何内存(因为我们马上将其释放?或者它仍然可以计算?)。
谢谢!
答案 0 :(得分:0)
两个循环的组合效果似乎是将m设置为n*n-1
然后malloc分配该字节数并释放它。因此空间复杂度为O(n ^ 2)。