我有一个简单的问题:
金字塔的顶层必须包含1个立方体,第二个层必须包含1 + 2 = 3个立方体,第三个层必须包含1 + 2 + 3 = 6个立方体,依此类推。因此,金字塔的第i层必须有1 + 2 + ... +(i - 1)+ i立方体。
给定n个立方体可能的最大高度是多少。
我很容易编码以下解决方案并通过了:
int main()
{
int i,sum,n;
cin >> n;
i = 1;
sum = 0;
while(sum <= n)
{
sum = sum + (i*(i+1))/2;
i++;
}
cout << i-2;
return 0;
}
但是,我对这个解决方案的复杂性并不十分自信。应该是O(log n)还是别的。我问similar question,我也有同样的困惑。任何人都可以在这种情况下解释一些简短的一般理论,以便它涵盖所有这些情景。或者链接到一些好的教程将非常有用
答案 0 :(得分:0)
你找到了最大的k,使得和(i(i + 1)/ 2代表i = 1..k)&lt; = n。
总和是Theta(k ^ 3)(见https://en.wikipedia.org/wiki/Pyramidal_number),所以最大的k将是Theta(n ^(1/3))。
由于你的循环迭代k次,代码是Theta(n ^(1/3))。