递归
- 先递后归
- 终止条件
- 递归调用
- 自下而上返回每一层计算结果
- 递归层级的时间分析和开辟栈帧的空间分析
数组十链表可以模拟绝大部分数据结构
整数编码
- 引入反码解决负数参与计算问题
- 引入补码解决反码不能处理正负零产生歧义问题
- 8 bit表示[-128,127],也就是-128 ~ -1, 0~127,补码中 0111 1111表示正整数最大值127,1111 1111表示负整数最大值-1。0000 0000表示0,1000 0000表示负数最小值-128
哈希表
- 用键在哈希函数处理后和🪣大小取模后得到映射到🪣的index索引,节点存储键值对,pair.first代表键 ,pair.second值
- 哈希冲突处理有1扩容即增大🪣容量,2链地址法,3开放寻址法(线性探测或多次哈希)
- 链地址法,如果链表过长也会大幅降低查询效率,可以将链表转换为红黑树,AVL树
- 主要是开放寻址就存在“不能直接删除元素”的问题,使用懒删除机制,不直接删除元素,而是利用常量TOMBSTONE 标记这个桶,在该机制下, 和
TOMBSTONE都代表空桶,都可以放置键值对。但不同的是,线性探测到TOMBSTONE时应该继续遍历,因为其之下可能还存在键值对。
- 然而,懒删除可能会加速哈希表的性能退化。这是因为每次删除操作都会产生一个删除标记,随着
TOMBSTONE的增加,搜索时间也会增加,因为线性探测可能需要跳过多个TOMBSTONE才能找到目标元素。
排序图速记

0-1背包,动态规划空间优化注意:一维 dp表内循环为什么倒序遍历?
因为是边遍历边更新一维dp表,倒序遍历更新的dp值不会影响到小背包容量下的dp更新。
完全背包确需要正序遍历
取决于二者的dp转移方程,一个取决于正上方和左上方的状态即i-1时。另一个取决于正上方和左方的状态。也就是一个需要未更新的i-1的状态所以倒序遍历,一个需要已更新的i行的状态,所以要正序遍历。
图表解释01背包

完全背包





