**面向零基础的 Java 算法入门与实战路径**
许多技术学习者面对算法时感到迷茫,往往是因为缺乏一个清晰的切入点。这门课程专门针对完全没有算法基础的学员设计,但它并非悬在空中的理论课,而是紧紧绑定 Java 语言进行讲解。因此,在开始学习前,你至少需要具备一定的 Java 语法基础,能够独立编写简单的类与方法,理解基本的面向对象概念。如果你的 Java 基础尚不牢固,建议先回头夯实语言基础,否则在课程中会频繁卡顿,难以跟上算法逻辑的推导。课程的核心价值在于它梳理出了一条更适合初学者的合理学习路径,旨在解决从零起步到工作五年内可能遇到的绝大多数常规算法问题,避免盲目刷题带来的挫败感。
**核心模块解析与重点攻克策略**
建议优先观看课程的前置部分,重点掌握数组、链表、栈、队列以及哈希表这些基础数据结构的内部实现原理。不要只背诵定义,要动手在 Java 中亲自实现这些结构,理解其时间复杂度差异对代码性能的具体影响。接着,深入理解递归与分治思想,这是解决复杂问题的关键思维工具。在此基础上,再过渡到常见的排序算法(如快排、归并排序)和基础查找算法。课程特别强调了“工作五年内”的覆盖范围,这意味着你需要重点掌握动态规划(DP)的基本状态转移方程推导,以及二叉树、图论的基础遍历与搜索算法。这些模块是面试和实际开发中最高频出现的考点,也是新手最容易感到抽象的部分,需要反复练习代码实现,直到能脱稿写出标准模板。
**配套练习与独立能力构建**
学习算法绝非“看懂即会”,代码动手量是决定成效的关键。建议采用“课内学习 + 独立复现”的模式:每看完一个算法模块,关闭视频,尝试独立在 IDE 中编写出该算法的核心逻辑,再对照课程代码找差异。利用课程提供的配套练习资源,针对每种数据结构进行增删改查的操作测试,确保你对边界条件(如空指针、数组越界、递归终止)有肌肉记忆。学完这门课,你应当能够独立完成以下任务:面对一个实际业务场景(如去重、最短路、资源调度),能迅速判断适用何种数据结构与算法;能用 Java 写出时间复杂度可控的代码;并能清晰向他人解释为什么选择这种方案而非其他。不要期望一节课解决所有难题,但你能建立起应对日常开发中 80% 算法问题的底层逻辑框架。保持每周 10-15 小时的代码实战量,将视频中的讲解转化为自己的解题直觉,这才是本课程带来的真正能力跃升。
课程介绍
算法与数据结构,。课程面向的是0算法基础学员,但课程以Java语言讲解算法,所以需要你具备Java语言基础。结合当下企业的用人标准和算法未来的发展方向,用“更适合初学者”的方式,总结出了一条“更合理”的算法学习路径,目的是要解决你从0算法基础到工作5五年内的绝大多数算法问题。
课程目录
├── 01 阶段一:算法与数据结构基础/@更多it资源 www. │ ├── 1-线性查找法/ │ │ ├── 第1章 欢迎大家来到算法与数据结构的世界/ │ │ │ ├── [ 31M] 1-1 欢迎大家来到算法与数据结构的世界 │ │ │ ├── [ 49M] 1-2 学习算法和数据结构到底有没有用? │ │ │ ├── [ 16M] 1-3 更多课程学习注意事项 │ │ │ ├── [ 35M] 1-4 课程编程环境的搭建 │ │ │ └── [100K] 1-5 JDK 的国内下载链接.pdf │ │ └── 第2章 线性查找法/ │ │ ├── [ 17M] 2-1 什么是算法 │ │ ├── [5.7M] 2-2 最简单的算法:线性查找法 │ │ ├── [ 36M] 2-3 实现线性查找法 │ │ ├── [ 32M] 2-4 使用泛型 │ │ ├── [ 35M] 2-5 使用自定义类测试我们的算法 │ │ ├── [ 18M] 2-6 循环不变量 │ │ ├── [ 27M] 2-7 简单的复杂度分析 │ │ ├── [ 31M] 2-8 常见的时间复杂度 │ │ ├── [ 40M] 2-9 测试算法性能 │ │ └── [2.8M] 2-10 本章小结 │ ├── 2-排序基础/ │ │ ├── 第1章 选择排序法/ │ │ │ ├── [ 17M] 1-1 最简单的排序算法:选择排序法 │ │ │ ├── [ 23M] 1-2 实现选择排序法 │ │ │ ├── [ 19M] 1-3 使用带约束的泛型 │ │ │ ├── [ 44M] 1-4 使用 Comparable 接口 │ │ │ ├── [ 71M] 1-5 选择排序法的复杂度分析 │ │ │ ├── [2.8M] 1-6 一个作业:换个角度实现选择排序法 │ │ │ └── [ 89K] 1-7 换个角度实现选择排序法,作业分析.pdf │ │ └── 第2章 插入排序法/ │ │ ├── [ 16M] 2-1 插入排序法 │ │ ├── [ 40M] 2-2 实现插入排序法 │ │ ├── [ 39M] 2-3 插入排序法的一个小优化 │ │ ├── [ 38M] 2-4 插入排序法的特性 │ │ ├── [2.7M] 2-5 一个作业:换个角度实现插入排序法 │ │ ├── [ 94K] 2-6 换个角度实现插入排序法,作业分析.pdf │ │ └── [4.7M] 2-7 本章小结 │ ├── 3-数据结构基础:动态数组,栈和队列/ │ │ ├── 第1章 数据结构基础:不要小瞧数组/ │ │ │ ├── [ 15M] 1-1 为什么要学习数据结构 │ │ │ ├── [ 15M] 1-2 使用 Java 中的数组 │ │ │ ├── [ 26M] 1-3 二次封装属于我们自己的数组 │ │ │ ├── [ 31M] 1-4 向数组中添加元素 │ │ │ ├── [ 29M] 1-5 数组中查询元素和修改元素 │ │ │ ├── [ 43M] 1-6 数组中的包含,搜索和删除 │ │ │ ├── [ 51M] 1-7 泛型类 │ │ │ ├── [ 34M] 1-8 动态数组 │ │ │ ├── [ 11M] 1-9 简单的复杂度分析 │ │ │ └── [ 24M] 1-10 均摊复杂度和防止复杂度的震荡 │ │ ├── 第2章 栈和队列/ │ │ │ ├── [ 13M] 2-1 栈和栈的应用:撤销操作和系统栈 │ │ │ ├── [ 36M] 2-2 栈的基本实现 │ │ │ ├── [ 37M] 2-3 栈的另一个应用:括号匹配 │ │ │ ├── [ 56M] 2-4 关于 Leetcode 的更多说明 │ │ │ ├── [ 33M] 2-5 数组队列 │ │ │ ├── [ 24M] 2-6 循环队列 │ │ │ ├── [ 49M] 2-7 循环队列的实现 │ │ │ ├── [ 32M] 2-8 数组队列和循环队列的比较 │ │ │ ├── [2.0M] 2-9 作业:换个方式实现队列? │ │ │ ├── [105K] 2-10 作业解析:不浪费一个空间的循环队列.pdf │ │ │ ├── [105K] 2-11 作业解析:没有 size 成员变量的循环队列.pdf │ │ │ ├── [3.1M] 2-12 作业:双端队列 │ │ │ ├── [117K] 2-13 作业解析:实现双端队列.pdf │ │ │ └── [972K] 2-14 Java 程序员,别用 Stack?!.pdf │ │ └── 第3章 习题补充:栈和队列其他习题/ │ │ ├── [ 19M] 3-1 作业:用栈实现队列和用队列实现栈 │ │ ├── [202K] 3-2 作业解析:用队列实现栈.pdf │ │ ├── [181K] 3-3 作业解析:用栈实现队列.pdf │ │ └── [ 73K] 3-4 更多栈和队列的问题推荐.pdf │ └── 4-动态数据结构基础:链表/ │ ├── 第1章 最基础的动态数据结构:链表/ │ │ ├── [ 21M] 1-1 什么是链表 │ │ ├── [ 42M] 1-2 在链表中添加元素 │ │ ├── [ 17M] 1-3 使用链表的虚拟头结点 │ │ ├── [ 34M] 1-4 链表的遍历,查询和修改 │ │ ├── [ 31M] 1-5 从链表中删除元素 │ │ ├── [ 30M] 1-6 使用链表实现栈 │ │ ├── [ 46M] 1-7 带有尾指针的链表:使用链表实现队列 │ │ └── [112K] 1-8 链表的性能问题.pdf │ ├── 第2章 透过链表看递归/ │ │ ├── [ 37M] 2-1 Leetcode中和链表相关的问题 │ │ ├── [ 26M] 2-2 测试自己的Leetcode链表代码 │ │ ├── [ 32M] 2-3 递归基础与递归的宏观语意 │ │ ├── [ 31M] 2-4 链表与递归 │ │ ├── [ 33M] 2-5 递归运行的机制:递归的微观解读 │ │ ├── [ 46M] 2-6 递归算法的调试 │ │ ├── [1.9M] 2-7 作业:链表的递归实现 │ │ ├── [152K] 2-8 作业解析:链表的递归实现.pdf │ │ ├── [ 36M] 2-9 链表添加元素递归方法的常见问题解析 │ │ ├── [ 16M] 2-10 更多和链表相关的话题 │ │ └── [114K] 2-11 斯坦福大学推荐的 18 个链表相关问题.pdf │ └── 第3章 补充 链表相关习题/ │ ├── [ 12M] 3-1 链表最经典的问题:翻转链表 │ ├── [ 19M] 3-2 翻转链表的非递归实现 │ ├── [ 23M] 3-3 翻转链表的递归实现 │ └── [ 16M] 3-4 更多链表问题推荐 ├── 02 阶段二:递归无处不在/ │ ├── 1-归并排序法/ │ │ ├── 第1章 归并排序法/ │ │ │ ├── [ 15M] 1-1 归并排序法的原理 │ │ │ ├── [ 15M] 1-2 归并过程 │ │ │ ├── [ 29M] 1-3 实现归并过程 │ │ │ ├── [ 40M] 1-4 实现归并排序法 │ │ │ ├── [ 36M] 1-5 归并排序法的微观解读 │ │ │ ├── [7.4M] 1-6 作业:在程序上调试跟踪归并排序法 │ │ │ ├── [144K] 1-7 在程序上调试跟踪归并排序法.pdf │ │ │ └── [ 36M] 1-8 归并排序法的复杂度分析 │ │ └── 第2章 更多关于归并排序法/ │ │ ├── [ 38M] 2-1 在有序数组,让归并排序法成为 O(n) 算法 │ │ ├── [ 48M] 2-2 使用插入排序法优化归并排序法 │ │ ├── [ 57M] 2-3 归并排序法的内存操作优化 │ │ ├── [ 14M] 2-4 自底向上的归并排序 │ │ ├── [ 64M] 2-5 实现自底向上的归并排序 │ │ ├── [1.3M] 2-6 作业:使用插入排序法优化自底向上的归并排序 │ │ ├── [125K] 2-7 使用插入排序法,优化自底向上的归并排序.pdf │ │ ├── [ 13M] 2-8 数组的逆序对数量问题 │ │ ├── [ 43M] 2-9 快速求解数组的逆序对数量 │ │ └── [8.2M] 2-10 归并排序法小结 │ ├── 2-快速排序法/ │ │ ├── 第1章 快速排序法/ │ │ │ ├── [ 15M] 1-1 快速排序法的原理 │ │ │ ├── [ 18M] 1-2 Partition │ │ │ ├── [ 39M] 1-3 第一版快速排序法 │ │ │ ├── [4.0M] 1-4 作业:深入理解快速排序的递归过程 │ │ │ ├── [115K] 1-5 作业解析:使用插入排序法优化快速排序.pdf │ │ │ ├── [ 28M] 1-6 第一版快速排序法的问题 │ │ │ ├── [ 31M] 1-7 为快速排序添加随机化 │ │ │ ├── [5.1M] 1-8 两个作业:深入玩转快速排序 │ │ │ ├── [112K] 1-9 作业解析:只创建一个 Random 类.pdf │ │ │ └── [158K] 1-10 作业解析:用算法生成一个特殊的测试用例.pdf │ │ └── 第2章 更多关于快速排序法/ │ │ ├── [ 22M] 2-1 快速排序算法还有问题 │ │ ├── [ 17M] 2-2 双路快速排序法 │ │ ├── [ 49M] 2-3 实现双路快速排序法 │ │ ├── [ 18M] 2-4 快速排序算法的复杂度分析 │ │ ├── [ 14M] 2-5 三路快速排序法 │ │ ├── [ 65M] 2-6 实现三路快速排序法 │ │ ├── [6.4M] 2-7 作业:一道面试问题,Sort Colors │ │ ├── [109K] 2-8 Leetcode 75: Sort Colors.pdf │ │ ├── [ 18M] 2-9 作业:Select K 问题 │ │ ├── [176K] 2-10 和 Select K 相关的三个问题.pdf │ │ └── [8.9M] 2-11 快速排序小结 │ ├── 3-二分查找法/ │ │ ├── 第1章 二分查找法/ │ │ │ ├── [ 18M] 1-1 二分查找法 │ │ │ ├── [ 27M] 1-2 二分查找法的递归写法 │ │ │ ├── [ 37M] 1-3 二分查找法的非递归写法 │ │ │ ├── [3.0M] 1-4 作业:Select K 的非递归写法 │ │ │ ├── [130K] 1-5 非递归实现 Select K 算法.pdf │ │ │ ├── [ 24M] 1-6 换个定义实现二分查找法 │ │ │ ├── [6.8M] 1-7 作业:换个定义实现算法 │ │ │ ├── [162K] 1-8 改变定义重写 Select K 算法.pdf │ │ │ └── [143K] 1-9 改变定义重写归并排序算法.pdf │ │ ├── 第2章 二分查找法的变种/ │ │ │ ├── [ 17M] 2-1 二分查找法的变种:upper │ │ │ ├── [ 32M] 2-2 实现 upper │ │ │ ├── [ 26M] 2-3 二分查找法的变种:ceil │ │ │ ├── [4.0M] 2-4 作业:二分查找法的变种:lower_ceil │ │ │ ├── [115K] 2-5 作业解析:实现 lower_ceil.pdf │ │ │ ├── [9.9M] 2-6 二分查找法的变种:lower │ │ │ ├── [ 55M] 2-7 实现 lower 和二分查找的大坑 │ │ │ ├── [6.5M] 2-8 作业:二分查找法的变种:lower_floor 和 upper_floor │ │ │ ├── [134K] 2-9 作业解析:实现 lower_floor 和 upper_floor.pdf │ │ │ ├── [ 10M] 2-10 二分查找法总结:二分查找模板 │ │ │ └── [103K] 2-11 作业解析:换个方式实现二分查找.pdf │ │ └── 第3章 补充:二分查找相关习题/ │ │ ├── [ 14M] 3-1 Leetcode 875 │ │ ├── [ 23M] 3-2 编程实现 Leetcode 875 │ │ ├── [ 13M] 3-3 作业:Leetcode 1011 │ │ ├── [137K] 3-4 解决 Leetcode 1011.pdf │ │ └── [ 11M] 3-5 更多二分查找相关问题 │ └── 4-二分搜索树/ │ ├── 第1章 二分搜索树/ │ │ ├── [ 12M] 1-1 为什么要研究树结构 │ │ ├── [ 29M] 1-2 二分搜索树基础 │ │ ├── [ 35M] 1-3 向二分搜索树中添加元素 │ │ ├── [ 23M] 1-4 改进添加操作:深入理解递归终止条件 │ │ ├── [3.8M] 1-5 作业:和二分搜索树的添加相关的两个问题 │ │ ├── [129K] 1-6 作业解析:和二分搜索树的添加相关的两个问题.pdf │ │ ├── [ 12M] 1-7 二分搜索树的查询操作 │ │ ├── [ 42M] 1-8 二分搜索树的前序遍历 │ │ ├── [ 21M] 1-9 二分搜索树的中序遍历和后序遍历 │ │ ├── [ 18M] 1-10 深入理解二分搜索树的前中后序遍历 │ │ ├── [ 31M] 1-11 二分搜索树前序遍历的非递归实现 │ │ ├── [ 28M] 1-12 二分搜索树的层序遍历 │ │ ├── [ 65M] 1-13 删除二分搜索树的最大元素和最小元素 │ │ ├── [ 46M] 1-14 删除二分搜索树的任意元素 │ │ └── [ 14M] 1-15 更多二分搜索树相关话题 │ └── 第2章 集合和映射/ │ ├── [ 45M] 2-1 集合基础和基于二分搜索树的集合实现 │ ├── [ 23M] 2-2 基于链表的集合实现 │ ├── [ 32M] 2-3 集合类的复杂度分析 │ ├── [ 25M] 2-4 Leetcode中的集合问题和更多集合相关问题 │ ├── [ 17M] 2-5 映射基础 │ ├── [ 48M] 2-6 基于链表的映射实现 │ ├── [ 50M] 2-7 基于二分搜索树的映射实现 │ ├── [ 24M] 2-8 映射的复杂度分析和更多映射相关问题 │ └── [ 39M] 2-9 Leetcode上更多集合和映射的问题 ├── 03 阶段三:算法与数据结构进阶/ │ ├── 1-堆,优先队列和堆排序/ │ │ ├── 第1章 最大堆,最小堆/ … 其余 183 项略,目录共 383 项






