← 全部文章

LeetCode 学习目录:数据结构与算法

这是 2024 年列出的算法学习目录,还没有整理到具体题解。先按数据结构和算法分类,再分别补练习。

数据结构

  1. 数组 (Array)
    • 定义:一组相同类型的数据按一定顺序排列的集合。
    • 常见操作:查找、插入、删除、排序。
    • 应用:动态数组(如 ArrayList)、矩阵操作等。
  2. 链表 (Linked List)
    • 定义:由一系列节点组成的线性数据结构,每个节点包含数据和指向下一个节点的指针。
    • 类型:单链表、双链表、循环链表。
    • 常见操作:插入、删除、反转、查找。
    • 应用:队列、栈、图的邻接表表示等。
  3. 栈 (Stack)
    • 定义:一种后进先出(LIFO)的数据结构。
    • 常见操作:入栈、出栈、查看栈顶元素。
    • 应用:括号匹配、表达式求值、深度优先搜索等。
  4. 队列 (Queue)
    • 定义:一种先进先出(FIFO)的数据结构。
    • 相关类型:普通队列、双端队列、优先队列。后两者有不同的访问或排序规则,不能都按普通队列的 FIFO 理解。
    • 常见操作:入队、出队、查看队头元素。
    • 应用:广度优先搜索、任务调度等。
  5. 哈希表 (Hash Table)
    • 定义:通过哈希函数将键映射到值的数据结构。
    • 常见操作:插入、删除、查找。
    • 应用:快速查找、缓存、去重等。
  6. 树 (Tree)
    • 定义:一种分层数据结构,由节点组成,每个节点有零个或多个子节点。
    • 类型:二叉树、二叉搜索树、平衡树(如 AVL 树、红黑树)、堆(如二叉堆、斐波那契堆)。
    • 常见操作:插入、删除、查找、遍历(前序、中序、后序、层序)。
    • 应用:文件系统、数据库索引、优先队列等。
  7. 图 (Graph)
    • 定义:由节点(顶点)和边组成的数据结构。
    • 类型:有向图、无向图、加权图。
    • 常见操作:遍历(深度优先搜索、广度优先搜索)、最短路径(Dijkstra 算法、Bellman-Ford 算法)、最小生成树(Kruskal 算法、Prim 算法)。
    • 应用:社交网络、地图导航、网络路由等。

算法

  1. 排序算法 (Sorting Algorithms)
    • 常见算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。
    • 应用:数据排序、优先级队列等。
  2. 搜索算法 (Search Algorithms)
    • 常见算法:线性搜索、二分搜索、深度优先搜索、广度优先搜索。
    • 应用:查找数据、图遍历等。
  3. 动态规划 (Dynamic Programming)
    • 定义:通过将复杂问题分解为更小的子问题来解决问题的算法。
    • 常见问题:背包问题、最长公共子序列、最长递增子序列、最短路径问题。
    • 应用:优化问题、路径规划等。
  4. 贪心算法 (Greedy Algorithms)
    • 定义:每一步选择当前的局部最优。是否能得到整体最优,要看问题能否按这种策略解决。
    • 常见问题:活动选择问题、背包问题、哈夫曼编码。
    • 应用:优化问题、图算法等。
  5. 回溯算法 (Backtracking)
    • 定义:逐步尝试候选方案,遇到不满足条件的分支就退回继续搜索。
    • 常见问题:八皇后问题、数独、全排列、组合问题。
    • 应用:组合优化、约束满足问题等。
  6. 分治算法 (Divide and Conquer)
    • 定义:将问题分解为更小的子问题,分别解决后合并结果的算法。
    • 常见问题:归并排序、快速排序、最大子数组问题。
    • 应用:排序、矩阵乘法等。
  7. 图算法 (Graph Algorithms)
    • 常见算法:Dijkstra 算法、Bellman-Ford 算法、Floyd-Warshall 算法、Kruskal 算法、Prim 算法、拓扑排序、强连通分量。
    • 应用:最短路径、最小生成树、图遍历等。
  8. 字符串算法 (String Algorithms)
    • 常见算法:KMP 算法、Rabin-Karp 算法、Trie 树、后缀数组、后缀树。
    • 应用:字符串匹配、文本处理、压缩算法等。