#6709. 时间复杂度专项练习 1

时间复杂度专项练习 1

1. 对一个整数 n(k位数),求各位数字之和(逐位取模10),时间复杂度是?
{{ select(1) }}

  • O(1)
  • O(k)
  • O(n)
  • O(n log n)

2. 对 n 个整数,每个整数最多 k 位,对每个数进行一次数位分离,时间复杂度是?
{{ select(2) }}

  • O(n)
  • O(k)
  • O(nk)
  • O(n log n)

3. 以下代码的时间复杂度是?

for(int i = 1; i <= n; i++){
    int x = i;
    while(x){
        x /= 10;
    }
}

{{ select(3) }}

  • O(n)
  • O(n log n)
  • O(n²)
  • O(log n)

4. 对一个整数 n,判断它是否为回文数(需要拆位),时间复杂度是?
{{ select(4) }}

  • O(1)
  • O(log n)
  • O(n)
  • O(n log n)

5. 不断对整数 x 进行“除2取余”,直到为0,时间复杂度是?
{{ select(5) }}

  • O(1)
  • O(log x)
  • O(x)
  • O(x log x)

6. 对一个数先转为二进制(O(log x)),再遍历每一位(O(log x)),总复杂度是?
{{ select(6) }}

  • O(log x)
  • O((log x)²)
  • O(x)
  • O(x log x)

7. 以下代码的时间复杂度是?

int l = 1, r = 1;
while(r <= n){
    r++;
}

{{ select(7) }}

  • O(1)
  • O(log n)
  • O(n)
  • O(n²)

8. 以下代码的时间复杂度是?

for(int i = 1; i <= n; i++){
    if(i % 2 == 0){
        cnt++;
    }
}

{{ select(8) }}

  • O(n)
  • O(n/2)
  • O(log n)
  • O(n²)

9. 以下代码的时间复杂度是?

for(int i = 1; i <= n; i++){
    for(int j = 1; j <= n; j++){
        a[i] += a[j];
    }
}

{{ select(9) }}

  • O(n)
  • O(n log n)
  • O(n²)
  • O(n³)

10. 枚举数组 a[1…n] 的所有连续子区间(双重循环 l、r),时间复杂度是?
{{ select(10) }}

  • O(n)
  • O(n log n)
  • O(n²)
  • O(n³)

11. 以下代码的时间复杂度是?

for(int i=1;i<=n;i++){
    for(int j=i;j<=n;j++){
        cnt++;
    }
}

{{ select(11) }}

  • O(n)
  • O(n log n)
  • O(n²)
  • O(n³)

12. 在枚举过程中,如果加入条件判断提前结束部分循环(剪枝),最坏情况下时间复杂度通常是?
{{ select(12) }}

  • 会降低到 O(n)
  • 会降低到 O(log n)
  • 不变(仍是原复杂度)
  • 变成 O(n²)

13. 统计数组中连续相同元素段数(一次扫描),时间复杂度是?
{{ select(13) }}

  • O(1)
  • O(n)
  • O(n log n)
  • O(n²)

14. 先用数组 cnt[] 统计每个数出现次数,再遍历一次数组计算答案(n 表示数字个数,m 表示数字的范围是 1 ~ m),总时间复杂度是?
{{ select(14) }}

  • O(n+m)
  • O(n log m)
  • O(n²)
  • O(m²)

15. 以下代码的时间复杂度是?

int i = 1;
while(i <= n){
    i *= 2;
}

{{ select(15) }}

  • O(n)
  • O(log n)
  • O(n log n)
  • O(n²)