大学时买过三本算法书,一本翻到第二十页,一本当显示器垫脚,还有一本送人了。原因都一样:公式能看懂,但不知道它在干什么。
Hello 算法换了顺序。它先给你一张图,让你看见数据在内存里怎么排、指针怎么跳,然后再讲为什么这么做。
这是 krahets 一个人起的项目,十三万颗星,中文版在线免费。整本书用动画图解的方式写,每一个数据结构都配了逐步演化的示意图,不是那种画完就完的静态插图。

比如数组那一节,它先画出元素、索引和内存地址三层的对应关系,再画扩容时把整块内存搬走的过程。看完这段,再去看“数组插入是 O(n)”这句话,就不需要背了。
代码是能跑的。Python、Java、C、C++、Go、Rust、JavaScript、TypeScript、C#、Swift、Dart、Zig、Kotlin,十几种语言同一套示例,复制下来改两个参数就能验证。
书的结构是循序渐进的:先讲复杂度和数据结构基础,再进到数组、链表、栈、队列、哈希表、树、堆、图,最后是搜索、排序、分治、回溯、动态规划、贪心。
每一章末尾有练习,也有“小结”把这一章的要点收一遍。这种写法对自学者友好——没人讲,你也能知道自己学到哪了。

它还做了件少见的事:整本书开源在 GitHub,读者可以提 issue 纠错,翻译成十几种语言也是社区在做。纸质版是后来才出的,内容一样。
限速的地方也要说。它是入门书,不是刷题书;配套的题量比不上 LeetCode,也不教你怎么在四十五分钟里写出最优解。想面试冲刺,还得去别的平台。
另外,动图在手机上看得费劲,屏幕小的时候反而要放大才能看清细节。有条件还是用电脑读。
书里还有个细节:讲到一个结构,会顺带提一句它在不同语言里的对应实现——同样一个动态数组,Python 里是 list,Java 里是 ArrayList,C 里得自己开内存。这种对照比背定义有用,至少知道学的东西落在哪。纸质版后来也出了,内容和线上一致,只是动画只有网页上有。
我把它推荐给过两个转行的朋友。一个说看到第三周终于明白哈希表为什么快,另一个说他终于不再怕递归。这两句话,比什么推荐语都实在。