list
- 基本思想 - 动态规划
- 贪心
- 回溯
- 分治
- 枚举
 
- 搜索(dfs/bfs) 
- 查找 - 二分查找
- 散列查找
 
- 字符串匹配 - kmp
- bm
- trie
 
- 排序 
- 并查集、djstra、topo 
- 图 - 关键路径
- 最小生成树
- 最短路径
- 拓扑排序
 
- 堆 - 大顶堆
- 优先队列
 
- 树 - 二叉树
- AVL 红黑树
- B/B+树
 
- 散列表 - 位图
- 动态扩容
 
- 线性表 
- 二叉树和 B+ 树 
- 快排怎么实现 - 双指针,分治
 
- 熟悉哪些数据结构? - 排序- 冒泡、选择、插入;归并排序、快排序;堆排序
 
- 二叉搜索树、平衡二叉树
- …
 
- 排序
- 最长递增子序列 
- 两个 list 求相同元素 - 排序后双指针法
- 使用 map
 
- 有两个有限队列,求两个队列的相同元素 - 使用 map
- 排序后双指针法
 
- 给定一个数 n,如 23121;给定一组数字 A 如 {2,4,9},求由 A 中元素组成的、小于 n 的最大数。如小于 23121 的最大数为 22999 
- 给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点 
- 二分查找 - 排序后从数组中间区分查询左部分或右部分;递归
 
- 字符串中最长不重复字符的子字符串 
- 有序数列合并 - 双指针法
 
- 青蛙跳楼梯 
- 反转链表 
- 跳表 
- 单向链表倒数第 K 个节点 
- 数组、链表的区别,适用的场景 - 数组查询的时间复杂度是 o(1),适合插入少,读多的场景
- 链表插入的事件复杂度最坏是 o(n),适合插入多的场景
 
- 哈希算法,列举几种 X 
- 实现 LRU 
- 平衡二叉树查找第 k 大的节点 
- 拓扑图求路径数,输入一个二维数组表示图,输出从起始点到终点可能的路径数 
- 九键手机 输入是只包含 1-9 的字符串,输出是对应按键可能的组合 
- 链表查找倒数第 k 个节点 追问:怎么把链表线性遍历提速 
- 二叉树多个节点的最近公共祖先 
- 二叉树两个节点的共同父节点 
- lru 算法 
- 十万个数中找出最大 1000 个数 
- 二叉树层序遍历 - 使用队列,遍历左右孩子后放入队列,循环直到队列为空
 
- 判断回文字符串 
- 复杂度判断一个数是否为质数 
- 第 K 大 
- 一组有序可重复数组找到某个最后出现的数的索引 - 使用 map,遍历每次更新数的最新出现索引
 
- 寻找 K 个高频的数字 - 遍历使用 map 记录出现次数同时记录最高频
 
- 实现双向链表,根据索引插入节点 
- 给定一个有序数组和一个数字,需要你判断出这个数字在数组里的出现次数,要求时间复杂度为