导读与学习路线
这个板块怎么读
它是一本书,不是博客
算法教程按章节组织,章节之间有先后,每篇底部有上一篇 / 下一篇。 左侧那棵目录树会一直跟着你,告诉你现在在书的哪个位置。
站内的 Agent 开发 板块也是这个形态(节点 + 三层递进), 两边都可以从头顺着读;区别只在那边的每个节点内部通常更独立一些。
这个区别不是排版偏好。算法是有依赖关系的知识:不知道什么是递归树, 动态规划那一章看了也是白看。顺序本身就是内容的一部分。
章节顺序是按依赖排的,不是按难度
这一点值得单独说,因为它决定了你该怎么跳读。
大多数算法教程按“由易到难”排。本站按知识点之间的依赖排 —— 也就是“学 A 之前必须先会 B”。两者不一样:贪心算法不难,但它排得很靠后, 因为它不在主链上;二叉树不算最难,但它排在中间,因为后面几乎所有东西都是它的变形。
主依赖链长这样:
数组 ──→ 数组操作 ──→ 双指针
└──────┬─────────→ 基础数据结构
链表 ─────┘
└──→ 链表双指针 ──→ 递归 ──→ 二叉树
├──→ 遍历视角(回溯 · DFS)
├──→ 子问题视角(分治 · 动规)
├──→ BFS ──→ 最短路径
└──→ 高级数据结构(BST · 堆 · 字典树 · 图)
数学 · 贪心 ← 不在链上,随时可以插进来看
⭐ 三个由此得出的结论:
- 数组和链表是两个平行的起点,先看哪个都行。
- 二叉树是整本书的枢纽。 到了这一章别赶进度 —— 后面的回溯、DFS、分治、动态规划、BFS、图,全部是它的变形。
- 递归不单开一章讲,它在“链表双指针”里第一次出现, 在“递归与二叉树”里正式展开。先见过,再讲清楚。
每个章节卡片下面都标了它的前置章节,跳读时看那一行。
两条路径
时间充裕:从头顺着读。前面几章看起来最不像“刷题”, 但后面每一章都在用它们的东西。
下周就面试:数组基础 → 双指针 → 递归与二叉树 → 子问题视角, 四章串下来是投入产出比最高的一条线。详见面试前的速成路线。
代码用什么语言
目前所有示例代码都是 JavaScript。
选它不是因为它适合刷题(它不适合——没有内置的优先级队列,大整数也麻烦),
而是因为它的语法噪音最少。本站要讲的是算法思路,
代码只是思路的载体;用 Java 写同一个双指针,你得先看完
public static int[] twoSum(int[] nums, int target) 才看得到第一行逻辑。
⭐ 所有模板都是语言无关的。你用 C++ 或 Python 面试,照着改就行, 需要动的只有容器的名字。
关于题目来源
本站讲到具体题目时,只用自己的话复述题意,不复制原题面 —— LeetCode 等平台的题面文字是有版权的。需要看原题的,每篇顶部会附原题链接。