You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

询问下述C++算法的时间复杂度:我认为是O(n)但书籍答案为O(nlogn)

算法时间复杂度分析

首先看给出的C++代码:

int k = 0;
for (int a = n; a >= 1; a /= 2)
  for (int b = a; b >= 1; b--)
    k++;
cout << k;

我们来拆解总执行次数:

  • 外层循环:a从n开始,每次除以2直到a >=1,执行次数为log₂n + 1次(比如n=8时,a取8、4、2、1,共4次)。
  • 内层循环:每次外层循环对应的内层循环执行次数等于当前的a值,因此总执行次数是n + n/2 + n/4 + ... + 1。

这是首项为n、公比为1/2的等比数列求和,结果为2n - 1(当n是2的幂时),即使n不是2的幂,总和也小于2n。因此该算法的时间复杂度是O(n)。

你提到书籍给出的答案是O(nlogn),大概率是题目代码存在差异——比如如果内层循环是b从1到n而非a,总次数才会是n*(log₂n+1),对应O(nlogn)的复杂度。

内容的提问来源于stack exchange,提问作者Andrei Morgovan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:12:02