大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)

最近在准备 考研 + 找实习,复习数据结构的时候发现一件事:

很多同学会写代码,但一问 时间复杂度 就开始沉默。

比如:

复制代码
for(i=0;i<n;i++)
   for(j=0;j<n;j++)

时间复杂度是多少?

有人说 O(n²),没问题。

但如果稍微变一下:

复制代码
for(i=1;i<n;i*=2)

很多人就懵了。

而实际上,时间复杂度是考研和面试的高频考点

所以我整理了 20 道经典时间复杂度题,难度不高,但非常有代表性。

如果你是:

  • 准备 考研408
  • 准备 找实习面试
  • 或者 想打好数据结构基础

建议认真看一遍。


一、什么是时间复杂度?

简单来说:

时间复杂度就是:算法执行次数随着输入规模 n 增长的变化趋势。

我们一般用 大 O 表示法(Big-O) 表示。

常见复杂度排序:

复制代码
O(1)     常数级
O(log n) 对数级
O(n)     线性级
O(n log n)
O(n²)
O(n³)
O(2^n)
O(n!)
O(n^n)

效率从高到低依次下降。


二、20 道经典时间复杂度题

1 基础循环

复制代码
for(int i=0;i<n;i++){
    printf("hello");
}

执行次数:

复制代码
n

时间复杂度:

O(n)


2 双重循环

复制代码
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
        printf("hi");
    }
}

执行次数:

复制代码
n × n

时间复杂度:

O(n²)


3 不同变量循环

复制代码
for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
        printf("hi");
    }
}

执行次数:

复制代码
n × m

时间复杂度:

O(nm)


4 三重循环

复制代码
for(int i=0;i<n;i++){
   for(int j=0;j<n;j++){
       for(int k=0;k<n;k++){
           printf("hi");
       }
   }
}

执行次数:

复制代码

时间复杂度:

O(n³)


5 循环减半

复制代码
for(int i=n;i>0;i/=2){
    printf("hi");
}

变化过程:

复制代码
n
n/2
n/4
n/8

执行次数:

复制代码
log₂ n

时间复杂度:

O(log n)


6 倍增循环

复制代码
for(int i=1;i<n;i*=2){
    printf("hi");
}

变化过程:

复制代码
1
2
4
8
16

执行次数:

复制代码
log₂ n

时间复杂度:

O(log n)


7 n + log n

复制代码
for(int i=0;i<n;i++){
    printf("a");
}

for(int j=1;j<n;j*=2){
    printf("b");
}

复杂度:

复制代码
O(n + log n)

根据 大O法则取最大项

最终:

O(n)


8 嵌套对数循环

复制代码
for(int i=0;i<n;i++){
    for(int j=1;j<n;j*=2){
        printf("hi");
    }
}

执行次数:

复制代码
n × log n

复杂度:

O(n log n)


9 三角循环

复制代码
for(int i=0;i<n;i++){
    for(int j=0;j<=i;j++){
        printf("hi");
    }
}

执行次数:

复制代码
1 + 2 + 3 + ... + n

这是经典公式:

1 + 2 + 3 + ... + n = n(n+1)/2

时间复杂度:

O(n²)


10 减少型嵌套循环

复制代码
for(int i=0;i<n;i++){
    for(int j=i;j<n;j++){
        printf("hi");
    }
}

执行次数:

复制代码
n + (n-1) + (n-2) + ... + 1

复杂度:

O(n²)


11 while + n 减半

复制代码
while(n>1){
    n = n/2;
}

执行次数:

复制代码
log₂ n

复杂度:

O(log n)


12 递归减半

复制代码
void f(int n){
    if(n<=1) return;
    f(n/2);
}

递归深度:

复制代码
log₂ n

时间复杂度:

O(log n)


13 二分查找

复制代码
while(l <= r){
    mid = (l+r)/2
}

每次缩小一半。

复杂度:

O(log n)

这是 所有面试必问算法之一


14 递归二叉分裂

复制代码
T(n) = 2T(n/2) + O(1)

复杂度:

O(n)

这是经典的 分治递归


15 归并排序

递归公式:

复制代码
T(n) = 2T(n/2) + O(n)

复杂度:

O(n log n)


16 快速排序平均复杂度

平均:

O(n log n)

最坏:

O(n²)


17 冒泡排序

复制代码
for(i=0;i<n;i++)
   for(j=0;j<n-i;j++)

复杂度:

O(n²)


18 插入排序

最坏情况:

O(n²)

最好情况:

O(n)


19 顺序查找

遍历数组:

复制代码
0 → n

复杂度:

O(n)


20 哈希查找

平均复杂度:

O(1)

最坏情况:

O(n)


三、面试和考研最爱考的 5 个复杂度

如果时间不多,至少记住这 5 个

算法 复杂度
二分查找 O(log n)
快速排序 O(n log n)
归并排序 O(n log n)
冒泡排序 O(n²)
哈希查找 O(1)

四、如何快速判断时间复杂度?

给大家总结 4 个实用技巧

1 看循环层数

复制代码
1层 → O(n)
2层 → O(n²)
3层 → O(n³)

2 看变量变化

复制代码
i++
→ O(n)

i*=2
→ O(log n)

3 递归看递归树

常见三种:

复制代码
T(n)=T(n-1)  → O(n)
T(n)=T(n/2)  → O(log n)
T(n)=2T(n/2) → O(n)

4 只保留最高阶

例如:

复制代码
O(n² + n + 100)

最终:

复制代码
O(n²)

五、写在最后

数据结构其实没有想象中那么难。

真正难的是:

没有系统刷题。

如果你:

  • 准备 考研408
  • 准备 算法面试
  • 或者和我一样 大三准备找实习

建议:

把时间复杂度题至少练 50 道。

很多算法题其实第一步就是:

先分析复杂度。

如果这一步不会,代码基本也写不出来。


如果这篇文章对你有帮助,可以:

  • 点个 赞 👍
  • 收藏
  • 转发给一起准备考研 / 找实习的同学

后面我也会继续整理:

  • 30 道经典链表题
  • 二叉树面试必刷题
  • 考研数据结构高频考点

一起加油。

大三这一年,真的很关键。

相关推荐
lizhongxuan2 小时前
AI小镇 - 涌现
算法·架构
AI工程架构师5 小时前
通常说算力是多少 FLOPS,怎么理解,GPU和CPU为什么差异这么大
算法
祈安_6 小时前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法
归去_来兮19 小时前
拉格朗日插值算法原理及简单示例
算法·数据分析·拉格朗日插值
千寻girling1 天前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法
颜酱1 天前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
CoovallyAIHub2 天前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
木心月转码ing2 天前
Hot100-Day14-T33搜索旋转排序数组
算法
会员源码网2 天前
内存泄漏(如未关闭流、缓存无限增长)
算法