我的老师声称此代码块将花费O(n)时间来执行。我试图找出原因。我意识到捆绑在一起的两个for循环将是一个算术序列.....我的逻辑方法是,如果K = 3,则内部循环将运行3次,然后运行两次,然后运行一次。如果K = 2,则内部循环将运行两次,运行一次,然后停止。
用数学术语来说,对于k = 3,它将是N,N-1,N-2
后来我可以使用算术级数公式,得到N *(N +(N-(N-1))/ 2。
我不知道如何处理while循环。
我可以推测的是,当N = 4时,循环运行两次,直到N = 9时,循环运行三次...我将如何进行数学设置?
最终结果是N *(N +(N-(N-1)))/ 2 + O(while循环)以获得O(N)吗?
任何建议将不胜感激。
void doit(int n) {
int k = 0; int m = n; int s = 0;
while (m <= n) {
k = k + 1;
m = k * k;
}
for (int i = 0; i < k; i++) {
for (int j = i; j < k; j++) {
s = s + m;
m = m - 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |