本文档的学习路线、讲次划分和内容编排,完全基于左程云老师(程序员左程云)的「算法和数据结构通关课」整理而来,在此向左老师致以诚挚的感谢。

👉 左老师的算法和数据结构通关课 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 算法和数据结构简介

位运算与进制

编号 内容 本站文章
003 二进制和位运算

排序与二分

编号 内容 本站文章
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!) 阶乘 全排列枚举

五、刷题资源

平台 链接 说明
LeetCode(中国) https://leetcode.cn 最主流的刷题平台
LeetCode(英文) https://leetcode.com 英文讨论区质量更高
Codeforces https://codeforces.com 竞赛向,锻炼思维速度
牛客网 https://www.nowcoder.com 校招面经和真题多
LintCode https://www.lintcode.com 适合入门,题目分类清晰