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 记录出现次数同时记录最高频
实现双向链表,根据索引插入节点
给定一个有序数组和一个数字,需要你判断出这个数字在数组里的出现次数,要求时间复杂度为