在这里插入图片描述
**在这里插入图片描述
在这里插入图片描述

时间复杂度 ≠ 代码跑了多少毫秒

它算的是:当输入规模 n 趋近无穷大时,算法执行操作数的增长量级。
只关心趋势:100n 和 n 都是线性增长 → 都记为 O(n)
只保留最高阶:n² + 100n + 1000 → 只看 n² → O(n²)
忽略常数和底数:log₂n、log₃n 都是对数级 → 统一记为 O(log n)

**,

判断时间复杂度,本质是统计代码执行的 “操作次数” 随输入规模 n 的增长趋势,并取其最高量级作为复杂度。

基本操作:赋值、加减乘除、比较、数组访问等,一次算 1 次操作。

大 O 表示法:只保留增长最快的项,忽略常数系数和低阶项。
例:2n² + 3n + 5 → 最高阶是 n² → 复杂度为 O(n²)
例:5log₂n + 10 → 最高阶是 log₂n → 复杂度为 O(log n)

大招

按代码结构分类判断

顺序结构

(无循环、无分支
2. 所有语句都是常数次操作,时间复杂度为 O(1)
3. `x = 10;
y = x + 20;
printf(“%d”, y);``


单层循环

**
循环次数和 n 成正比 → O(n)
例:
c运行


for (i = 0; i < n; i++) {
a[i] = 0; // 每次循环1次操作
}


循环执行 n 次 → 复杂度 O (n)
特殊情况:循环变量按倍数增长 / 减少 → O(log n)

c
运行
i = 1;
while (i <= n) {
i = i * 2; // 每次翻倍
}
循环次数满足 2^k ≤ n → k = log₂n → 复杂度 O (log n)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐