算法速成学习笔记
数据结构
数组链表
哈希表原理及应用
二叉树基础及遍历
线段树使用场景
图结构
开始刷题
链表
核心框架,建议用时 1 天
双指针技巧秒杀七道链表题目 | labuladong 的算法笔记
- 合并两个有序链表
- 单链表的分解
- 合并 k 个有序链表
- 优先级队列(二叉堆)
- 优先队列 pq 中的元素个数最多是 k,所以一次 poll 或者 add 方法的时间复杂度是 O(logk)。 所有的链表节点都会被加入和弹出 pq,所以算法整体的时间复杂度是 O(Nlogk),其中 k 是链表的条数,N 是这些链表的节点总数。
- 单链表的倒数第 k 个节点
- 单链表的中点
- 判断链表是否包含环
- 有环时fast指针为什么在第一圈就能直接在fast.next.next与slow.next相遇呢? 因为fast与slow的差速为1.
- 两个链表是否相交
习题,建议用时 1 天
【练习】链表双指针经典习题 | labuladong 的算法笔记
核心框架,建议用时 1 天
单链表的一个进阶技巧是递归操作单链表,不过这种思路一般用于面试时说一下就行,笔试时就用标准的指针操作即可。
如何判断回文链表 | labuladong 的算法笔记
单链表的花式反转方法汇总 | labuladong 的算法笔记
数组
核心框架,建议用时 0.5 天
双指针技巧秒杀七道数组题目 | labuladong 的算法笔记
习题,建议用时 1~2 天
二维数组的花式遍历技巧 | labuladong 的算法笔记
【练习】数组双指针经典习题 | labuladong 的算法笔记
核心框架,建议用时 1 天
滑动窗口算法核心代码模板 | labuladong 的算法笔记
习题,建议用时 1 天
【练习】滑动窗口算法经典习题 | labuladong 的算法笔记
核心框架,建议用时 1~2 天
二分搜索算法核心代码模板 | labuladong 的算法笔记
实际运用二分搜索时的思维框架 | labuladong 的算法笔记
核心框架,建议用时 1~2 天
小而美的算法技巧:前缀和数组 | labuladong 的算法笔记
小而美的算法技巧:差分数组 | labuladong 的算法笔记
队列/栈
核心框架,建议用时 0.5 天
队列实现栈以及栈实现队列 | labuladong 的算法笔记
习题,建议用时 1~2 天
【练习】栈的经典习题 | labuladong 的算法笔记
【练习】队列的经典习题 | labuladong 的算法笔记
核心框架,建议用时 1~2 天
单调栈算法模板解决三道例题 | labuladong 的算法笔记
单调队列结构解决滑动窗口问题 | labuladong 的算法笔记
习题,建议用时 1~2 天
【练习】单调栈的几种变体及经典习题 | labuladong 的算法笔记
【练习】单调队列的通用实现及经典习题 | labuladong 的算法笔记
二叉树 & 递归思想
核心框架,建议用时 0.5 天
一个视角 + 两种思维模式搞定递归 | labuladong 的算法笔记
核心框架,建议用时 1 天
二叉树系列算法核心纲领 | labuladong 的算法笔记
核心框架,建议用时 2~3 天
二叉树心法(思路篇) | labuladong 的算法笔记
二叉树心法(构造篇) | labuladong 的算法笔记
二叉树心法(序列化篇) | labuladong 的算法笔记
习题,建议用时 1 天
拓展:最近公共祖先系列解题框架 | labuladong 的算法笔记
拓展:如何计算完全二叉树的节点数 | labuladong 的算法笔记
习题,建议用时 2 天
【练习】用「遍历」思维解题 I | labuladong 的算法笔记
【练习】用「分解问题」思维解题 I | labuladong 的算法笔记
【练习】运用层序遍历解题 I | labuladong 的算法笔记
二叉搜索树
核心框架,建议用时 1~2 天
二叉搜索树心法(特性篇) | labuladong 的算法笔记
二叉搜索树心法(基操篇) | labuladong 的算法笔记
核心框架,建议用时 1 天
二叉搜索树心法(构造篇) | labuladong 的算法笔记
数据结构设计
LRU 是经典的数据结构设计问题,必须掌握;LFU 难度更大一些,可以作为选学。
习题,建议用时 1 天
算法就像搭乐高:手撸 LRU 算法 | labuladong 的算法笔记
算法就像搭乐高:手撸 LFU 算法 | labuladong 的算法笔记
习题,建议用时 1 天
拓展:如何实现一个计算器 | labuladong 的算法笔记
习题,建议用时 1 天
【练习】更多经典设计习题 | labuladong 的算法笔记
【游戏】实现贪吃蛇 | labuladong 的算法笔记
图算法
核心框架,建议用时 1~2 天
环检测及拓扑排序算法 | labuladong 的算法笔记
二分图判定算法 | labuladong 的算法笔记
核心框架,建议用时 1 天
Union Find 并查集原理 | labuladong 的算法笔记
Union-Find 并查集算法 | labuladong 的算法笔记
核心框架,建议用时 1 天
最小生成树算法概览 | labuladong 的算法笔记
Kruskal 最小生成树算法 | labuladong 的算法笔记
核心框架,建议用时 1 天
Dijkstra 算法核心原理及实现 | labuladong 的算法笔记
【练习】Dijkstra 算法经典习题 | labuladong 的算法笔记
DFS/回溯算法
核心框架,建议用时 1~2 天
回溯算法解题套路框架 | labuladong 的算法笔记
回溯算法实践:数独和 N 皇后问题 | labuladong 的算法笔记
核心框架,建议用时 1~2 天
回溯算法秒杀所有排列/组合/子集问题 | labuladong 的算法笔记
核心框架,建议用时 1 天
一文秒杀所有岛屿题目 | labuladong 的算法笔记
解答回溯算法/DFS算法的若干疑问 | labuladong 的算法笔记
习题,建议用时 2 天
【练习】回溯算法经典习题 I | labuladong 的算法笔记
【练习】回溯算法经典习题 II | labuladong 的算法笔记
【练习】回溯算法经典习题 III | labuladong 的算法笔记
BFS 算法
核心框架,建议用时 1 天
BFS 算法解题套路框架 | labuladong 的算法笔记
习题,建议用时 2 天
【练习】BFS 经典习题 I | labuladong 的算法笔记
【练习】BFS 经典习题 II | labuladong 的算法笔记
动态规划
核心框架,建议用时 1~2 天
动态规划解题套路框架 | labuladong 的算法笔记
动态规划设计:最长递增子序列 | labuladong 的算法笔记
核心框架,建议用时 1~2 天
base case 和备忘录的初始值怎么定? | labuladong 的算法笔记
最优子结构原理和 dp 数组遍历方向 | labuladong 的算法笔记
习题,建议用时 1~2 天
经典动态规划:编辑距离 | labuladong 的算法笔记
动态规划设计:最大子数组 | labuladong 的算法笔记
经典动态规划:最长公共子序列 | labuladong 的算法笔记
习题,建议用时 1~2 天
经典动态规划:0-1 背包问题 | labuladong 的算法笔记
经典动态规划:子集背包问题 | labuladong 的算法笔记
经典动态规划:完全背包问题 | labuladong 的算法笔记
贪心算法
核心框架,建议用时 1 天
分治算法
核心框架,建议用时 1 天
数学
习题,建议用时 1~2 天
一行代码就能解决的算法题 | labuladong 的算法笔记
谈谈游戏中的随机算法 | labuladong 的算法笔记
习题,建议用时 1 天
如何高效寻找素数 | labuladong 的算法笔记
如何高效进行模幂运算 | labuladong 的算法笔记
其他经典面试题
习题,建议用时 1~2 天
扫描线技巧:安排会议室 | labuladong 的算法笔记
如何高效解决接雨水问题 | labuladong 的算法笔记
一文秒杀所有丑数系列问题 | labuladong 的算法笔记
习题,建议用时 1~2 天
带权重的随机选择算法 | labuladong 的算法笔记
一个方法团灭 nSum 问题 | labuladong 的算法笔记