B站:爱学习的饲养员
目标:简单题、中等题会刷,至少有思路
1. 算法的时间复杂度和空间复杂度
1.1 时间复杂度
1)什么是时间复杂度
算法的执行效率 = 算法的执行时间与算法的输入值之间的关系
2)大O表示法
3)常用时间复杂度案例分析
O(1)、O(logN)、O(N)、O(NlogN)、O(N2)
O(1):时间复杂度和输入值没有关系
O(logN):
O(N):1层循环
O(M + N):2个循环相加
O(NlogN):1个循环套1个O(logN)循环
O(N2):2个循环嵌套
4)常用时间复杂度对比
O(1) < O(logN) < O(N) < O(NlogN) < O(N2) < O(2n) < O(n!)
二分查找O(logN)
排序O(NlogN)
1.2 空间复杂度
1)什么是空间复杂度
算法的存储空间与输入值之间的关系。
2)大O表示法
O(1)、O(N)
O(1):常量
O(N):array、list、linked list、递归
O(N2):2个循环嵌套
3)常用空间复杂度案例分析
4)常用空间复杂度对比
时间和空间只能二选一。面试时,和面试官讲清楚。工作时,时间 > 空间。
2. 常用的数据结构
2.1 数组Array
1)定义
数组:在连续的内存空间中,存储一组相同类型的元素。
2)常用API
创建数组:
新增元素:尾插O(1)、中间插入O(N)
访问元素(用索引下标访问元素): O(1)
更新元素: O(1)
删除元素:remove元素O(N)、pop(下标)O(N)、pop()O(1)
获取数组长度:len(a)
遍历数组:for in;for in enumerate; for in range
查找某个元素:O(N)
数组排序:
2.2 链表
1)定义
链表:
特点:写很快读很慢,适用读少写多的情形
2)考察项
访问Access:O(N)
搜索Search:O(N)
插入Insert:O(1)
删除Delete: O(1)
3)常用API
创建链表、添加元素、访问元素、查找元素、删除元素、链表的长度
链表练习题:203 移除链表元素 206 反转链表