数组 / 动态数组
已入路线数组是连续空间,下标就是坐标。
- 视觉隐喻
- 超市货架 / 跑道 / 坐标轴
- 动画看点
- L/R 指针从两端移动,被排除的格子变暗
- 观察状态
- index · left / right · current value · candidate range
- 适合题型
- 双指针、滑动窗口、前缀和
- 故事示例
- 在按价格排序的货架上找两件商品,价格太低就移动左手,价格太高就移动右手。
- 入口题
- LC26LC27LC88+4
算法只是面试的一部分,完整后端路线还需要 Go、MySQL、Redis/MQ、分布式、稳定性和 AI 工程。
完整后端路线看这里从「数据结构」到「解题模式」,看懂每一道算法题的状态变化。
不要死背题解。先判断数据长什么样,再判断题目要求你做什么,最后进入动画 Lab,看指针、窗口、队列、递归栈、DP 表如何一步步变化。
先看题目里的数据长什么样:数组、链表、树、图、堆、哈希……
再看题目要求你做什么:双指针、滑窗、二分、BFS、DP……
按题号、难度、专题、动画状态筛选全部 LeetCode 逐题动画。
点一下题目里的关键词,看看可能对应哪些算法模式。
能根据比较结果排除一部分候选。
先看题目里的数据长什么样。
数组是连续空间,下标就是坐标。
字符串是字符数组,但多了匹配、回退、前缀复用。
链表题不是遍历难,是指针改线顺序难。
栈解决最近的未完成问题。
队列解决按顺序推进和一层一层扩散。
哈希表用空间换时间,把全局搜索变成定点查询。
堆解决每次都要拿最大、最小、第 K 个的问题。
树题的核心是递归:当前节点做什么,左右子树返回什么。
图题解决连通、路径、依赖和扩散。
Trie 把字符串集合变成共享前缀路径。
并查集解决谁和谁属于同一个集合。
矩阵题是二维地图上的搜索、扩散和状态转移。
区间题解决多个范围之间的合并、覆盖、冲突和排序。
设计题不是单个结构,而是多个结构组合满足复杂约束。
再看题目要求你做什么操作。
用两个指针压缩搜索空间,排除不可能区间。
维护连续区间不变量,右扩左收。
区间和 = 结束读数 - 开始读数。
二分不是找 mid,而是维护答案所在区间。
排序把无序变有序,为后续贪心或双指针铺路。
用空间换时间,O(1) 定点查询。
维护单调候选栈,新元素进来踢掉不符合的。
队首始终是当前窗口最优候选。
当前节点做什么,子问题返回什么,怎么合并。
选择 → 递归 → 撤销,枚举决策树。
沿一条路走到底,回溯换路。
波纹一圈圈扩散,第一次到达即最短路。
入度为 0 的先做,做完释放后继。
find 找族长,union 合并,路径压缩加速。
只维护前 K 个候选,不必完整排序。
每步选当前最优,并证明不会后悔。
定义状态、转移方程、填表顺序。
不选继承上一行,选则来自剩余容量。
按区间长度从小到大填表。
两序列对齐,相等来自对角,不等取 max。
每个 bit 是开关,异或相同熄灭不同点亮。
公式机器:输入数字,中间步骤逐行,输出答案。
KMP 的核心不是快,而是主串不回头。
当前状态 + 输入事件 → 转移规则 → 下一状态。
先看这些样板,理解本站的学习方式。
理解为什么有序数组可以 O(n) 找两数和
理解窗口不变量
理解为什么不能先改指针再保存 next
理解递归不是玄学,是调用栈
理解为什么 BFS 第一次到达就是最短路
理解二分是维护答案所在区间
理解每个格子到底从哪里来
理解主串不回头
按能力递进,不按百科顺序。
按题号、难度、数据结构、题型、状态筛选。