数据结构与算法学习路径总结
概述
这是一个针对时间紧迫的学习者的速成规划,旨在帮助读者在短时间内掌握数据结构和算法的核心知识。该规划分为「数据结构」和「算法刷题」两大部分。
为什么选择速成规划?
1. 基于模板框架,统一的解法风格
2. 循序渐进,由浅入深,同时包含数据结构和算法
3. 科学的学习方法,丰富的辅助工具
学习建议
- 每天花费1~2小时的碎片化时间学习
- 不要过度死磕,第一次学习以理解和模仿为主
- 先掌握框架思维,再刷题单
第一部分:数据结构
1. 数组/链表
- 介绍:基本的数组链表概念
- 重点技巧:环形数组(可以用O(1)的时间复杂度在数组头部进行插入删除操作)
- 建议用时:1天
2. 哈希表
- 核心原理:哈希表的原理必须掌握
- 扩展结构:
- LinkedHashMap(用链表加强哈希表)
- ArrayHashMap(用数组加强哈希表)
- 建议用时:1~2天
3. 二叉树基础及遍历
- 重要性:二叉树遍历是入门递归思维的关键
- 内容:
- 二叉树基础及常见类型
- 二叉树的递归/层序遍历
- 多叉树的递归/层序遍历
- DFS和BFS的适用场景
- 层序遍历的三种写法模板
- 建议用时:1~2天
4. 二叉搜索树
- 特点:左小右大
- 建议用时:0.5天
5. 二叉堆
- 关键应用:优先级队列
- 核心要点:
- 优先级队列是一种能够自动排序的数据结构
- 二叉堆是一种拥有特殊性质的完全二叉树
- 优先级队列的核心方法是swim, sink
- 建议用时:0.5天
6. 图结构
- 内容:
- 图结构基础及通用代码实现
- 图结构的DFS/BFS遍历
- 建议用时:1天
第二部分:算法刷题
1. 链表相关
- 核心技巧:双指针技巧
- 内容:
- 双指针技巧秒杀七道链表题目
- 练习:链表双指针经典习题
- 如何判断回文链表
- 单链表的花式反转方法汇总
- 建议用时:2~3天
2. 数组相关
- 核心技巧:双指针(快慢指针、左右指针)
- 经典算法:二分搜索、滑动窗口
- 内容:
- 双指针技巧秒杀七道数组题目
- 二维数组的花式遍历技巧
- 练习:数组双指针经典习题
- 滑动窗口算法核心代码模板
- 练习:滑动窗口算法经典习题
- 二分搜索算法核心代码模板
- 实际运用二分搜索时的思维框架
- 二分搜索三种代码模板
- 小而美的算法技巧:前缀和数组/差分数组
- 建议用时:5~7天
3. 队列/栈
- 内容:
- 队列实现栈以及栈实现队列
- 练习:栈/队列的经典习题
- 单调栈算法模板解决三道例题
- 单调队列结构解决滑动窗口问题
- 练习:单调栈/队列的几种变体及经典习题
- 建议用时:4~6天
4. 二叉树 & 递归思想
- 核心理念:所有递归算法的本质上都是二叉树的遍历
- 内容:
- 一个视角+两种思维模式搞定递归
- 二叉树系列算法核心纲领
- 二叉树心法(思路篇/构造篇/序列化篇)
- 拓展:最近公共祖先系列解题框架
- 拓展:如何计算完全二叉树的节点数
- 练习:用不同思维模式解题
- 建议用时:4~6天
5. 二叉搜索树
- 内容:
- 二叉搜索树心法(特性篇/基操篇)
- 二叉搜索树心法(构造篇)
- 建议用时:2~3天
6. 数据结构设计
- 内容:
- 算法就像搭乐高:手撸LRU/LFU算法
- 实现计算器
- 更多经典设计习题
- 建议用时:3天
7. 图算法
- 内容:
- 环检测及拓扑排序算法
- 二分图判定算法
- Union Find并查集算法
- 最小生成树问题(Kruskal算法)
- Dijkstra最短路径算法
- 建议用时:5天
8. DFS/回溯算法
- 本质:暴力穷举算法
- 内容:
- 回溯算法解题套路框架
- 回溯算法实践:数独和N皇后问题
- 回溯算法秒杀所有排列/组合/子集问题
- DFS算法:一文秒杀所有岛屿题目
- 练习:回溯算法经典习题
- 建议用时:5~6天
9. BFS算法
- 本质:二叉树的层序遍历,适合解决最短路径问题
- 内容:
- BFS算法解题套路框架
- 练习:BFS经典习题
- 建议用时:3天
10. 动态规划
- 本质:带备忘录的暴力穷举
- 内容:
- 动态规划解题套路框架
- 动态规划设计:最长递增子序列
- base case和备忘录的初始值
- 最优子结构原理和dp数组遍历方向
- 经典动态规划问题(编辑距离、最大子数组、最长公共子序列、背包问题等)
- 建议用时:5~6天
11. 贪心算法
- 核心思想:充分利用信息,提前排除不可能是最优解的情况
- 内容:贪心算法原理及应用
- 建议用时:1天
12. 分治算法
- 核心思想:分而治之提高效率
- 内容:分治算法详解
- 建议用时:1天
13. 数学及其他经典面试题
- 内容:
- 扫描线技巧:安排会议室
- 如何高效解决接雨水问题
- 一文秒杀所有丑数系列问题
- 带权重的随机选择算法
- 一个方法团灭nSum问题
- 建议用时:3~4天
14. 排序算法
- 内容:十大经典排序算法导读
- 建议用时:1天
学习方法总结
1. 先掌握框架再刷题:不要图省事不学框架就直接刷题
2. 题单的价值:
- 提前了解公司考题的难度及算法类别
- 方便复习,检验学习效果
3. 学习步骤:
- 先学常见的算法框架
- 再独立刷题单
- 掌握套路后,题单最多两三个小时就能刷完
工具与资源
- Chrome插件:在力扣题目页面显示本站思路讲解
- VSCode插件和Jetbrains插件:集成速成目录题目列表
- 可视化面板:帮助降低理解成本,提高学习效率