本文档全面概述了LeetCode-Master仓库中涵盖的数据结构和算法。它为理解算法问题解决的基本组成部分及其实现提供了路线图。有关如何处理这些主题的结构化学习路径,请参阅学习路径与结构。
该仓库以循序渐进的学习顺序组织数据结构和算法,旨在系统地构建知识。这种方法使学习者能够在解决更复杂的主题之前掌握基本概念。
该仓库涵盖了构成算法问题解决基础的六种基本数据结构。
数组是最基本的数据结构,提供连续的内存块来存储相同类型的元素。该仓库涵盖了
有关详细内容,请参阅数组。
链表将元素存储在通过指针连接的节点中,从而实现高效的插入和删除。主要主题包括
有关详细内容,请参阅链表。
哈希表通过键值映射提供O(1)平均时间复杂度的查找、插入和删除操作。该仓库探讨了
有关详细内容,请参阅哈希表。
字符串操作是编程和面试中的常见任务。该仓库涵盖了
有关详细内容,请参阅字符串。
这些结构遵循特定的操作顺序原则(栈为LIFO,队列为FIFO)。该仓库考察了
有关详细内容,请参阅栈与队列。
二叉树是分层结构,每个节点最多有两个子节点,是许多高级数据结构的基础。主要主题包括
有关详细内容,请参阅二叉树。
该仓库涵盖了构成问题解决策略基础的六种主要算法方法。
这种多功能技术使用双指针遍历数据结构,通常可以消除对嵌套循环的需求。应用包括
有关详细内容,请参阅双指针技巧。
回溯是一种通过递归试错来探索所有潜在解决方案的系统方法。该仓库探讨了
有关详细内容,请参阅回溯。
贪心算法在每一步都做出局部最优选择,以找到全局最优解。主要主题包括
有关详细内容,请参阅贪心算法。
动态规划通过将复杂问题分解为重叠子问题来解决。该仓库提供了广泛的覆盖内容,包括
有关详细内容,请参阅动态规划。
单调栈维持严格递增或递减顺序的元素,能够高效解决涉及下一个更大/更小元素的问题。应用包括
有关详细内容,请参阅单调栈。
图论提供了建模和解决涉及连接实体问题的工具。该仓库涵盖了
有关详细内容,请参阅图论。
来源:README.md374-408 README.md374-408
此图展示了不同数据结构之间的相互关系及其在算法设计中的常见应用
下表提供了根据问题特点选择合适算法的指导
| 问题特点 | 建议方法 | 数据结构 | 示例 |
|---|---|---|---|
| 在排序数据中查找元素 | 二分搜索 | 数组 | 704.二分查找 |
| 跟踪频率或映射 | 哈希表 | 哈希映射,数组 | 242.有效的字母异位词 |
| 按特定顺序处理元素 | 栈/队列 | 栈,队列 | 232.用栈实现队列 |
| 寻找具有重叠子问题的最优解 | 动态规划 | 数组,矩阵 | 509.斐波那契数 |
| 寻找所有可能的组合 | 回溯 | 数组,树 | 77.组合 |
| 做出局部最优选择 | 贪心法 | 数组,堆 | 455.分发饼干 |
| 在链式结构中查找模式 | 双指针 | 数组,链表 | 142.环形链表II |
| 处理分层数据 | 树遍历 | 二叉树 | 94.二叉树的中序遍历 |
| 查找下一个更大/更小元素 | 单调栈 | 栈 | 739.每日温度 |
| 查找路径或连通性 | 图算法 | 图 | 岛屿数量 |
理解不同数据结构和算法的时间与空间复杂度对于有效解决问题至关重要。下表总结了典型的复杂度
| 数据结构/算法 | 时间复杂度(平均) | 空间复杂度 | 最佳用途 |
|---|---|---|---|
| 数组(访问) | O(1) | O(n) | 按索引直接访问 |
| 数组(搜索 - 未排序) | O(n) | O(1) | 小数据集 |
| 数组(搜索 - 已排序) | O(log n) | O(1) | 二分查找 |
| 链表 | O(n)用于访问,O(1)用于插入 | O(n) | 频繁插入/删除 |
| 哈希表 | O(1) | O(n) | 快速查找,频率计数 |
| 二叉树(平衡) | O(log n) | O(n) | 分层数据,有序访问 |
| 二叉树(非平衡) | O(n) | O(n) | 偏斜树的最坏情况 |
| 栈/队列 | O(1)用于压入/弹出/查看 | O(n) | LIFO/FIFO 处理 |
| 回溯 | O(b^d),其中b是分支,d是深度 | O(d) | 带约束的穷举搜索 |
| 动态规划 | 因问题而异 | 因问题而异 | 重叠子问题的优化 |
| 贪心算法 | 因问题而异 | 通常为O(n) | 局部优化 |
| 图(BFS/DFS) | O(V+E),其中V是顶点,E是边 | O(V) | 遍历,路径查找 |
| Dijkstra 算法 | 使用最小堆为O((V+E)log V) | O(V) | 最短路径(无负边) |
| Bellman-Ford 算法 | O(V*E) | O(V) | 最短路径(处理负边) |
来源:README.md92-98 README.md374-408
本概述为LeetCode-Master仓库中涵盖的数据结构和算法提供了路线图。每个主题都在前一个主题的基础上构建,为解决算法问题奠定了全面基础。有关具体实现和问题解决模式,请参阅每种数据结构和算法的专门页面。
有关使用这些概念解决问题的系统方法,请参阅问题解决方法论。