#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²)