导读与学习路线

这个板块怎么读

它是一本书,不是博客

算法教程按章节组织,章节之间有先后,每篇底部有上一篇 / 下一篇。 左侧那棵目录树会一直跟着你,告诉你现在在书的哪个位置。

站内的 Agent 开发 板块也是这个形态(节点 + 三层递进), 两边都可以从头顺着读;区别只在那边的每个节点内部通常更独立一些。

这个区别不是排版偏好。算法是有依赖关系的知识:不知道什么是递归树, 动态规划那一章看了也是白看。顺序本身就是内容的一部分。

章节顺序是按依赖排的,不是按难度

这一点值得单独说,因为它决定了你该怎么跳读。

大多数算法教程按“由易到难”排。本站按知识点之间的依赖排 —— 也就是“学 A 之前必须先会 B”。两者不一样:贪心算法不难,但它排得很靠后, 因为它不在主链上;二叉树不算最难,但它排在中间,因为后面几乎所有东西都是它的变形。

主依赖链长这样:

数组 ──→ 数组操作 ──→ 双指针
  └──────┬─────────→ 基础数据结构
链表 ─────┘
  └──→ 链表双指针 ──→ 递归 ──→ 二叉树
                                ├──→ 遍历视角(回溯 · DFS)
                                ├──→ 子问题视角(分治 · 动规)
                                ├──→ BFS ──→ 最短路径
                                └──→ 高级数据结构(BST · 堆 · 字典树 · 图)

数学 · 贪心   ← 不在链上,随时可以插进来看

⭐ 三个由此得出的结论:

  1. 数组和链表是两个平行的起点,先看哪个都行。
  2. 二叉树是整本书的枢纽。 到了这一章别赶进度 —— 后面的回溯、DFS、分治、动态规划、BFS、图,全部是它的变形。
  3. 递归不单开一章讲,它在“链表双指针”里第一次出现, 在“递归与二叉树”里正式展开。先见过,再讲清楚。

每个章节卡片下面都标了它的前置章节,跳读时看那一行。

两条路径

时间充裕:从头顺着读。前面几章看起来最不像“刷题”, 但后面每一章都在用它们的东西。

下周就面试:数组基础 → 双指针 → 递归与二叉树 → 子问题视角, 四章串下来是投入产出比最高的一条线。详见面试前的速成路线。

代码用什么语言

目前所有示例代码都是 JavaScript。

选它不是因为它适合刷题(它不适合——没有内置的优先级队列,大整数也麻烦), 而是因为它的语法噪音最少。本站要讲的是算法思路, 代码只是思路的载体;用 Java 写同一个双指针,你得先看完 public static int[] twoSum(int[] nums, int target) 才看得到第一行逻辑。

⭐ 所有模板都是语言无关的。你用 C++ 或 Python 面试,照着改就行, 需要动的只有容器的名字。

关于题目来源

本站讲到具体题目时,只用自己的话复述题意,不复制原题面 —— LeetCode 等平台的题面文字是有版权的。需要看原题的,每篇顶部会附原题链接。