数据结构与算法常见问题

1. 数组:

1.1. 操作:

  • Insert——在给定索引位置插入一个元素
  • Get——返回给定索引位置的元素
  • Delete——删除给定索引位置的元素
  • Size——获取数组内所有元素的总数

1.2. 常问问题:

  1. 找到数组中第二小的元素
  2. 找到数组中第一个没有重复的整数
  3. 合并两个分类数组
  4. 重新排列数组中的正值和负值

2. 堆栈:

2.1. 操作:

  • Push——在顶部插入元素
  • Pop—— 从堆栈中删除后返回顶部元素
  • isEmpty——如果堆栈为空,则返回 true
  • Top ——返回顶部元素,但不从堆栈中删除

2.2. 常问问题:

  1. 使用堆栈计算后缀表达式
  2. 对堆栈中的值进行排序
  3. 检查表达式中的括号是否平衡

3. 队列:

3.1. 操作:

  • Enqueue() —— 向队列末尾插入元素
  • Dequeue() —— 从队列头部移除元素
  • isEmpty() —— 如果队列为空,则返回 true
  • Top() —— 返回队列的第一个元素

3.2. 常问问题:

  1. 使用队列来实现堆栈
  2. 颠倒队列中前 k 个元素的顺序
  3. 使用队列生成从 1 到 n 的二进制数

4. 链表:

4.1. 类型:

  • 单链表(单向)
  • 双链表(双向)

4.2. 操作:

  • InsertAtEnd —— 在链表末尾插入指定元素
  • InsertAtHead —— 在链表头部插入指定元素
  • Delete —— 从链表中删除指定元素
  • DeleteAtHead —— 删除链表的第一个元素
  • Search —— 返回链表中的指定元素
  • isEmpty —— 如果链表为空,返回 true

4.3. 常问问题:

  1. 翻转列表
  2. 检测链表中的循环
  3. 返回链表中倒数第 n 个节点
  4. 移除链表中的重复值

5. 树:

5.1. 类型:

N 叉树

平衡树

二叉树

二叉搜索树

平衡二叉树

红黑树

2-3 树

5.2. 常问问题:

  1. 找到一个二叉树的高度
  2. 找到一个二叉搜索树中第 k 个最大值
  3. 找到距离根部“k”个距离的节点
  4. 找到一个二叉树中给定节点的祖先(ancestors)

6. 图:

6.1. 分类:

  • 无向图,有向图
  • 邻接矩阵,邻接列表
  • 常用算法:
  • 广度优先搜索
  • 深度优先搜索

6.2. 常问问题:

  1. 实现广度优先搜索和深度优先搜索
  2. 检查一个图是否为树
  3. 计算一张图中的边的数量
  4. 找到两个顶点之间的最短路径

7. 字典树(Tries,这是一种高效的树,有必要单独列出来):也叫“前缀树”

7.1. 常问问题:

  1. 计算字典树中的总字数
  2. 打印存储在字典树中的所有单词
  3. 使用字典树对数组的元素进行排序
  4. 使用字典树从字典中形成单词
  5. 构建一个T9字典

8. 哈希表:

8.1. 常问问题:

  1. 找到数组中的对称对
  2. 追踪遍历的完整路径
  3. 查看一个数组是否为另一个数组的子集
  4. 检查给定数组是否不相交