【问题标题】:Calculating the time complexity of the following code计算以下代码的时间复杂度
【发布时间】:2026-02-11 16:50:02
【问题描述】:

有人可以帮忙找出以下代码的复杂性吗?

def mystery(n):
    sum = 0
    if n % 2 == 0:
        for i in range(len(n + 10000)): 
            sum += 1

    elif n % 3 == 0:
        i, j = 0, 0
        while i <= n:
            while j <= n:
                sum += j - 1
                j += 1
            i += 1
    else:
        sum = n**3

下面代码的时间复杂度会不会是 O(n^2),因为在最坏的情况下,elif 语句会被执行,所以外部的 while 循环会执行 n 次,而嵌套的 while 循环会执行 n 次次一次只是因为我们从未重置 j?因此,我们将有 O(n^2 + n) 并且因为前导项是 n^2,所以复杂度将是 O(n^2)?

【问题讨论】:

  • elif 部分只有 O(n)。
  • 我不确定我明白为什么
  • 因为一次j == n,它不会变成0。所以双while实际上只是sum += j - 1的一个while循环
  • 那么随着 n 变大,嵌套 while 循环的复杂度会是 O(1) 吗?

标签: python time-complexity big-o


【解决方案1】:

elif 部分:

  • i=0 时,while j &lt;= n: 循环为 O(n)。
  • i>0 时,j=n+1,所以while j &lt;= n: 循环为 O(1)。

所以elif 部分是 O(n) + O(n*1) = O(n+n) = O(n)。

【讨论】: