为什么以下代码具有O(n)的复杂性?

skj*_*shi 0 time-complexity

我在这个页面上遇到了一些练习题.问题要求下面的代码和答案的时间复杂度是O(n).但是,根据我的理解,外部循环运行log(n)次,内部循环运行O(n),因此它应该具有O(n*log(n))的复杂性.

int count = 0;
for (int i = N; i > 0; i /= 2) {
    for (int j = 0; j < i; j++) {
        count += 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

请澄清我在这里错过了什么.

小智 5

内部语句运行N + N/2 + N/4 + N/8 + ...次.这是2*N = O(N).