为什么时间复杂度为O(n)而不是O(nlogn)?难道你不必将外循环的复杂性与内循环的复杂性相乘吗?
int fun(int n){
int count = 0;
for (int i = n; i > 0; i /= 2)
for (int j = 0; j < i; j++)
count += 1;
return count;
}
答案 0 :(得分:1)
在循环的第一次迭代中,内循环覆盖n的一半。下一次迭代涵盖四分之一,然后是八分之一,依此类推。您可以通过以下函数表示系数。正如你所看到的那样,它是一个总和为1的无限系列。因此整个函数是O(n)