我对代码片段的时间复杂性存在疑问,并且不太了解给出的解决方案。
function (n) {
for(int i =0 ; i < n ; i ++){
for(int j = 0 ; j <= n ; j += i){
printf("*");
}
在上面的代码中,内部循环为n/i
的每个值执行i
次。而且,总体时间复杂度为O(nlogn)
。
我无法弄清楚为什么内循环执行n/i
次。有人可以帮帮我吗。
答案 0 :(得分:0)
有两个循环,一个递增i
,一个递增j
。
给定固定i
,对于j
循环的每次传递,j
增加i
,直到j
到达n
。< / p>
因此每次迭代中j
的值为:
j
j + i
j + 2i
...
j + (n/i - j/i)i
如您所见,这运行O(n / i)次。