本文档的学习路线、讲次划分和内容编排,完全基于左程云老师(程序员左程云)的「算法和数据结构通关课」整理而来,在此向左老师致以诚挚的感谢。
👉 左老师的算法和数据结构通关课 B站、YouTube 同步更新,完全免费,觉得好帮忙扩散!
完整的算法学习路线图,共 103 讲。建议按「入门 → 必备 → 扩展」顺序学习。
🔗 标记的条目表示本站有对应博客文章文字版
学习总览
1 2 3 4 5 6 7
| 【入门篇】001 ~ 018 (18讲) → 打好数据结构和基础算法地基 │ ▼ 【必备篇】019 ~ 099 (81讲) → 覆盖笔试面试 99% 考点 │ ▼ 【扩展篇】100 ~ 103 (4讲) → KMP / AC 自动机 / Manacher 等进阶
|
一、入门篇(001 ~ 018)
目标:掌握基础数据结构和简单排序,能独立写出链表、二叉树、栈队列的基本操作。
思维开启
| 编号 |
内容 |
本站文章 |
| 001 |
学习算法的语言问题以及如何开通 gpt4 |
|
| 002 |
从社会实验到入门提醒 |
|
| 005 |
对数据验证的重要手段(对数器雏形) |
|
| 007 |
时间复杂度和空间复杂度 |
|
| 008 |
算法和数据结构简介 |
|
位运算与进制
排序与二分
| 编号 |
内容 |
本站文章 |
| 004 |
选择、冒泡、插入排序 |
|
| 006 |
二分搜索 |
二分查找 |
链表
| 编号 |
内容 |
本站文章 |
| 009 |
单双链表及其反转 - 堆栈诠释 |
|
| 010 |
链表入门题目 - 合并两个有序链表 |
合并两个排序的链表 |
| 011 |
链表入门题目 - 两个链表相加 |
|
| 012 |
链表入门题目 - 划分链表 |
|
栈、队列、双端队列
| 编号 |
内容 |
本站文章 |
| 013 |
队列和栈 - 链表、数组实现 |
|
| 014 |
队列和栈入门题目 - 栈和队列相互实现 |
|
| 015 |
栈的入门题目 - 最小栈 |
|
| 016 |
双端队列 - 双链表和固定数组实现 |
|
二叉树入门
| 编号 |
内容 |
本站文章 |
| 017 |
二叉树及其三种序的递归实现 |
二叉树的遍历 |
| 018 |
二叉树遍历的非递归实现和复杂度分析 |
二叉树的遍历 |
二、必备篇(019 ~ 099)
目标:覆盖算法笔试和面试的核心考点,能独立解决中等及以上难度题目。
02 基础输入输出
| 编号 |
内容 |
本站文章 |
| 019 |
算法笔试中处理输入和输出 |
|
03 递归、排序、分治
| 编号 |
内容 |
本站文章 |
| 020 |
递归和 master 公式 |
|
| 021 |
归并排序 |
|
| 022 |
归并分治 |
|
| 023 |
随机快速排序 |
|
| 024 |
随机选择算法 |
|
| 025 |
堆结构和堆排序 |
堆排序 |
| 027 |
堆结构常见题 |
|
| 028 |
基数排序 |
|
| 029 |
重要排序算法的总结 |
|
04 哈希表与有序表
| 编号 |
内容 |
本站文章 |
| 026 |
哈希表、有序表和比较器的用法 |
|
05 位运算专题
| 编号 |
内容 |
本站文章 |
| 030 |
异或运算的骚操作 |
|
| 031 |
位运算的骚操作 |
|
| 032 |
位图 |
|
| 033 |
位运算实现加减乘除 |
|
06 链表与数据结构设计
| 编号 |
内容 |
本站文章 |
| 034 |
链表高频题目和必备技巧 |
判断链表中是否有环 |
| 035 |
数据结构设计高频题 |
|
07 二叉树进阶
| 编号 |
内容 |
本站文章 |
| 036 |
二叉树高频题目 - 上(不含树型 dp) |
|
| 037 |
二叉树高频题目 - 下(不含树型 dp) |
二叉排序树 |
| 038 |
常见经典递归过程解析 |
|
| 039 |
嵌套类问题的递归解题套路 |
|
| 040 |
N 皇后问题 - 重点是位运算的版本 |
|
08 数学基础
| 编号 |
内容 |
本站文章 |
| 041 |
最大公约数、同余原理 |
|
09 打表与猜解法(重要!)
| 编号 |
内容 |
本站文章 |
| 042 |
对数器打表找规律的技巧 |
|
| 043 |
根据数据量猜解法的技巧(天宇第一重要技巧) |
|
10 前缀、差分、前缀树
| 编号 |
内容 |
本站文章 |
| 044 |
前缀和原理和代码详解 |
|
| 045 |
前缀树的相关题目 |
|
| 046 |
构建前缀信息的技巧 - 解决子数组相关问题 |
|
| 047 |
一维差分与等差数列差分 |
|
| 048 |
二维前缀和、二维差分、离散化技巧 |
|
11 窗口与双指针
| 编号 |
内容 |
本站文章 |
| 049 |
滑动窗口技巧与相关题目 |
|
| 050 |
双指针技巧与相关题目 |
|
12 二分答案法
| 编号 |
内容 |
本站文章 |
| 051 |
二分答案法与相关题目 |
|
13 单调栈 & 单调队列
| 编号 |
内容 |
本站文章 |
| 052 |
单调栈 - 上 |
|
| 053 |
单调栈 - 下 |
|
| 054 |
单调队列 - 上 |
|
| 055 |
单调队列 - 下 |
|
14 并查集与洪水填充
| 编号 |
内容 |
本站文章 |
| 056 |
并查集 - 上 |
|
| 057 |
并查集 - 下 |
|
| 058 |
洪水填充 |
|
15 图论:拓扑、最短路、生成树
| 编号 |
内容 |
本站文章 |
| 059 |
建图、链式前向星、拓扑排序 |
|
| 060 |
拓扑排序的扩展技巧 |
|
| 061 |
最小生成树 |
|
| 062 |
宽度优先遍历及其扩展 |
|
| 063 |
双向广搜 |
|
| 064 |
Dijkstra 算法、分层图最短路 |
|
| 065 |
A 星、Floyd、Bellman-Ford 与 SPFA |
|
16 动态规划体系(核心中的核心)
| 编号 |
内容 |
本站文章 |
| 066 |
从递归入手 - 一维动态规划 |
青蛙跳台阶拓展问题 |
| 067 |
从递归入手 - 二维动态规划 |
|
| 068 |
见识更多二维动态规划题目 |
|
| 069 |
从递归入手 - 三维动态规划 |
|
| 070 |
子数组最大累加和问题与扩展 - 上 |
|
| 071 |
子数组最大累加和问题与扩展 - 下 |
|
| 072 |
最长递增子序列问题与扩展 |
|
| 073 |
背包 dp - 01 背包、有依赖的背包 |
|
| 074 |
背包 dp - 分组背包、完全背包 |
|
| 075 |
背包 dp - 多重背包、混合背包 |
|
| 076 |
区间 dp - 上 |
|
| 077 |
区间 dp - 下 |
|
| 078 |
树型 dp - 上 |
|
| 079 |
树型 dp - 下 |
|
| 080 |
状压 dp - 上 |
|
| 081 |
状压 dp - 下 |
|
| 082 |
动态规划中用观察优化枚举的技巧 - 上 |
|
| 083 |
动态规划中用观察优化枚举的技巧 - 下 |
|
| 084 |
数位 dp - 上 |
|
| 085 |
数位 dp - 下 |
|
| 086 |
动态规划中得到具体决策方案的技巧 |
|
| 087 |
动态规划中根据数据量猜解法技巧 |
|
| 088 |
动态规划专题总结与预告 |
|
17 贪心
| 编号 |
内容 |
本站文章 |
| 089 |
贪心经典题目专题 1 |
|
| 090 |
贪心经典题目专题 2 |
|
| 091 |
贪心经典题目专题 3 |
数轴覆盖 |
| 092 |
贪心经典题目专题 4 |
|
| 093 |
贪心经典题目专题 5 |
|
| 094 |
贪心经典题目专题 6 |
|
18 博弈论
| 编号 |
内容 |
本站文章 |
| 095 |
博弈类问题必备内容详解 - 上 |
|
| 096 |
博弈类问题必备内容详解 - 下 |
|
19 数学进阶
| 编号 |
内容 |
本站文章 |
| 097 |
质数判断、质因子分解、质数筛 |
|
| 098 |
快速幂、矩阵快速幂与两类问题 |
|
| 099 |
逆元和除法同余、容斥原理 |
|
三、扩展篇(100 ~ 103)
目标:掌握竞赛级别的字符串匹配算法,能应对高难度题目。
| 编号 |
内容 |
本站文章 |
| 100 |
KMP 算法原理和代码详解 |
KMP算法 |
| 101 |
KMP 算法相关题目 |
|
| 102 |
AC 自动机原理、优化、代码详解 |
|
| 103 |
Manacher 算法、扩展 KMP |
|
四、复杂度速查
| 复杂度 |
含义 |
常见场景 |
| O(1) |
常数时间 |
数组随机访问、哈希查找 |
| O(log n) |
对数时间 |
二分查找、平衡树操作 |
| O(n) |
线性时间 |
单循环遍历数组、快排 partition |
| O(n log n) |
线性对数 |
归并排序、快速排序平均 |
| O(n²) |
平方时间 |
双重循环、冒泡排序 |
| O(2ⁿ) |
指数时间 |
递归无优化的斐波那契、子集枚举 |
| O(n!) |
阶乘 |
全排列枚举 |
五、刷题资源