数据结构选择题求空间复杂度

下面算法的空间复杂度为 ▁▁▁▁▁。




int foo(int **a, int n)
{
    int i, j, s = 0;
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            s += a[i][j];
        }
    }
    return s;
}

A.

O(n2)

B.

O(1)

C.

O(2n)

D.

O(n)

代码分析

  • 变量声明:函数内仅声明了两个整型变量 i 和 s,用于循环计数和累加求和。
  • 空间占用:无论输入参数 n 的值如何变化,这两个变量始终只占用固定大小的内存空间(与 n 无关)。
  • 循环特性:循环过程中没有使用额外的数组、栈、队列等数据结构,也没有递归调用导致的栈空间增长。

空间复杂度判断

  • O(1) 表示算法的空间占用为常数级别,与输入规模 n 无关。
  • 本题中,变量数量和内存占用不随 n 增大而增加,因此空间复杂度为 O(1)

下面算法的空间复杂度为 ▁▁▁▁▁。



int foo(int n)
{
    return n * (n + 1) / 2;
}

A.

O(n)

B.

O(1)

C.

O(n2)

D.

O(2n)

代码分析

函数 foo 中仅包含简单的算术运算,直接返回数学公式的结果:

  • 没有声明额外的数组、链表等数据结构。
  • 变量(如 n 本身为输入参数,通常不计入额外空间)占用的内存空间固定,与输入规模 n 无关。

空间复杂度判断

  • O(1) 表示空间占用为常数级别,不随 n 的增大而变化。
  • 本题中,无论 n 多大,算法仅使用固定数量的变量(如计算过程中的临时存储单元),空间占用恒定。

其他选项排除

  • A. O(n) 和 C. O(n²):适用于需要线性或平方级额外空间的算法(如存储 n 个元素的数组),本题不满足。
  • D. O(2ⁿ):指数级空间复杂度,本题无此类空间增长。

答案:B

下面算法的时间复杂度为 ▁▁▁▁▁。


下面算法的时间复杂度为 ▁▁▁▁▁。

int foo(int *a, int n)
{
    int i, s = 0;
    for (i = 0; i < n; ++i)
    {
        s += a[i];
    }
    return s;
}


 )

A.

O(nlog2​n)

B.

O(n2)

C.

O(n)

D.

O(n根号n​)

代码分析

函数 foo 通过一个 for 循环遍历数组 a 的所有元素,从 i=0 到 i=n-1,共执行 n 次循环。每次循环内仅进行一次加法运算(s += a[i]),时间消耗为常数 O(1)

时间复杂度计算

  • 总操作次数为 n × O(1) = O(n),即时间复杂度与输入规模 n 成线性关系。

选项排除

  • A. O(nlog₂n):常见于分治算法(如归并排序),本题无对数级操作。
  • B. O(n²):常见于双重循环,本题仅单层循环。
  • D. O(nⁿ):指数级复杂度,本题无此类增长。

答案:C

下面算法的时间复杂度为 ▁▁▁▁▁。

int foo(int **a, int n)
{
    int i, j, s = 0;
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            s += a[i][j];
        }
    }
    return s;
}


​
 

代码分析

函数 foo 包含一个双重循环

  • 外层循环 for (i = 0; i < n; ++i) 执行 n 次。
  • 内层循环 for (j = 0; j < n; ++j) 在外层每次循环时执行 n 次。
  • 每次内层循环内仅进行一次加法运算(s += a[i][j]),时间消耗为常数 O(1)

时间复杂度计算

  • 总操作次数为 外层循环次数 × 内层循环次数 = n × n = n²
  • 因此,时间复杂度为 O(n²),表示算法耗时与输入规模 n 的平方成正比。

答案:B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值