[算法笔记]极客时间 算法面试通关40讲 覃超
【算法笔记】极客时间 算法面试通关40讲 覃超
相关链接
- 课程链接(付费):https://time.geekbang.org/course/intro/130
- 部分PPT: [https://github.com/s32n/algorithm](https://github.com/ s32n/algorithm)
- 代码链接:
- 别人的总结:算法面试通关40讲-总结
在leetcode 上的题号
数组、链表:
206 . 反转链表 √
24 . 两两交换链表中的节点 √
141 . 环形链表 √
142 . 环形链表 II
25 . K个一组翻转链表
(堆)栈stack、队列queue
注意:
堆是另一种数据结构,
不会让手写,每个语言都自己有实现。
栈:先入先出FILO,压栈出栈
队列:先入先出FIFO
常见数据结构操作的时间复杂度:
(栈和队列的插入删除查找的时间复杂度是相同的)
常见算法的时间复杂度如下:
20 . 有效的括号 √
21 . 用栈实现队列 √
225 . 用队列实现栈 √
优先队列
实现机制:
- 用堆: 二叉堆 多项式堆 斐波那契堆
- 二叉搜索树
小顶堆,越小的越排在前面,最小的在最顶部。
大顶堆 同理,根节点最大。
维基百科 :heap wiki 堆
下图可知,最简单的二叉堆性能不好。严格斐波那契堆 性能较好。
703 . 数据流中的第K大元素 √
239 . 滑动窗口最大值 √ 难理解啊
使用 python 直接调用现成的heapq 堆排列实现,最小堆实现
滑动窗口问题,双端队列。
705 . 粉碎糖果 kth-largest-element-in-a-stream
706 . 滑动窗口最大值
哈希表: map 和 set 映射和集合
哈希表:映射表一样的东西,方便快速查找。
哈希函数:将所有的转(取模)到一个表中找到,表的索引通过 哈希函数计算出来。
哈希碰撞: 数据的数量大于表的长度时,就一定会冲突,公用同一个模具。
hashmap 和 hashset :插入删除查找O(1),但存储数据无序.
treemap 和 treeset :插入删除查找O(logN),但存储数据有序.
python 字典默认的就是 hashmap 实现的。
242 . 有效的字母异位词 √
1 . 两数之和 √
15 . 三数之和. √ 难点
18 . 四个数之和
树,图、二叉(搜索)树
大概念:
树子
二叉树(面试最常见)
二叉搜索树
小概念:
父亲节
孩子节点
左右孩子
根节点
二叉树
完全二叉树
链是特殊化的树
树是特殊化的图
图 地图走路径最短时会使用到。(面试很少考到)
二叉搜索树,又称为 有效二叉树、排序二叉树,空树也是二叉搜索树。具备如下性质:
- 左子树所有的节点的值均小于它的根节点的值。
- 右子树所有的结点的值均大于它的根节点的值;
- 递归,左右子树也都满足上面的条件。
(
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
)
注意:
不是左右孩子直接比较,还需要根节点的参与。
中序遍历后是升序的。
特点:
5. 平均的搜索插入删除的时间复杂度是 O(logN)