首页 > 试题广场 >

下列程序的时间复杂度是?

[单选题]
下列程序的时间复杂度是()
for (int i = 1, s = 0; i <= n; ++i)
{
    int t = 1;
    for (int j = 1; j <= i; ++j)
        t = t * j;
    s = s + t;
}

  • O(n)
  • O(n*logn)
  • O(n^2)
  • O(n^3)
推荐
答案:C
时间复杂度只跟循环有关,跟常数级操作无关。因为时间复杂度是取数量级的,而不是具体计算次数。所以这个程序的时间复杂度等价于:
for (int i = 1; i <= n; ++i)
      for (int j = 1; j <= i; ++j)
这两层循环,外层执行n次,内存平均执行n/2次,时间复杂度为O(n^2)
编辑于 2015-01-28 17:56:16 回复(0)

执行次数分别为1 2 3 ... n

所以总的执行次数是1到n的和,为n*(1+n)/2,时间复杂度是O(n^2)

发表于 2015-08-06 16:50:54 回复(1)
当 i==n 的时候就是标准的O(N^2),所以按照对高次幂开说就是O(N^2)
发表于 2019-02-18 16:08:56 回复(0)
C,2层循环
发表于 2020-03-22 11:48:20 回复(0)
时间复杂度,2层for循环
发表于 2015-01-21 13:12:54 回复(0)