时间复杂度的数学证明方法相对比较复杂,通常在工程实际中,会分析就好。
算法学习:反复模仿,不懂先放过,之后回头看,把经典算法牢记于心
Big O notation
注意: 只看最高复杂度的运算
常数时间复杂度
int
对数时间复杂度
for
线性时间复杂度
for
平方, 2层循环嵌套
for
立方, 3层循环嵌套
for
指数级时间复杂度,递归
int
递归如何分析时间复杂度?
答: 推荐画出 递归树
阶乘
常数系数可以忽略,在分析时不用考虑,只要说以上术语即可。
主定理 Master Throrem
上述第四种是 归并排序,所有排序算法,最优的办法是
思考题,计算时间复杂度
二叉树的遍历 -前序、中序、后序 ?
图的遍历?
搜索算法,DFS、BFS?
二分法?
面试编程四件套:
- 与面试官 反复沟通,搞清题目意思
- 想 所有可能的解决办法,并比较这些算法的时间和空间复杂度
- 找出 最优方案,优先选取 时间复杂度最优 的方法,时间复杂度也优的更好
- 开始写代码,测试程序
空间复杂度
- 数组的长度,就看数组开的长度
- 递归的深度,递归的最大深度,看一个例子: LeetCode官方题解-爬楼梯
Reference:
如何理解算法时间复杂度的表示法,例如 O(n²)、O(n)、O(1)、O(nlogn) 等?