2019年秋天,我第一次点开左神的算法班。
那时候我连时间复杂度都不会算。for循环嵌套两层,别人问“这是O几”,我答“反正能跑”。leetcode只刷了三道,两道是“两数之和”。一道因为太经典,答案背下来了,另一道是复制粘贴跑通的,至今没懂。
不是什么励志故事的起点,就是一个普通程序员,被一面挂了三次之后,终于承认有些坎绕不过去。
论坛里搜“算法怎么学”,十条有八条提左神。评价出奇地一致:能听懂,跟得上,不劝退。
我将信将疑点开第一期,讲的是对数器和异或运算。
四十分钟后,我在笔记本上写下一行字:
原来我从前不是笨,是没人这么讲。
第一,它把“门槛”拆成台阶。
很多算法课的第一节是时间复杂度和空间复杂度。
左神的第一节,是打印二进制。
他把一个int拆成32位,从高位到低位,一行行印在屏幕上。然后问你:你看,计算机眼里没那么多玄学,就是0和1。
异或运算,教材定义是“相同为0,不同为1”。左神说,你记这个没用的,你记“无进位相加”。
然后他演算:7异或13,二进制竖式列出来,不进位,每一位单独算。你看着那个竖式,突然明白了为什么异或能交换、能归零、能当临时变量用。
那节课我没觉得自己在学算法。我只是觉得,小时候那个让我头疼的二进制竖式,终于有人帮我算清楚了。
第二,它不让数学成为借口。
很多人学算法卡住,第一反应是“我数学不好”。
左神不讲高数,不讲线代,不讲离散。他讲怎么把题做出来,不讲怎么证明这道题属于NP难。
讲KMP,他不推导next数组的数学性质。他画两个字符串,一个在上面,一个在下面,拿手指头比划:你看,这儿能跳,这儿不能跳,跳多了会漏。
讲暴力递归到动态规划,他不背状态转移方程。他先让你写递归——把问题拆成子问题,子问题再拆,拆到不能再拆。然后说,你看,这些子问题重复算了,拿个表记下来,下次直接查。
那个过程像在学一门手艺,不是学一门学科。你不是在攀登,你是在他手心里走,每一步他都告诉你左脚踩哪、右脚踩哪。
第三,它敢用“笨办法”开头。
左神讲二叉树,前序中序后序,不讲递归压栈,不讲系统调用。他拿一个笔记本,画一棵树,用手指头指着根说:我先记下这个,然后去左边,左边走完回来,再去右边。
你跟着他的手指头走一遍,三分钟后,你写出来递归代码了。
然后他说:现在你把递归改成非递归。你懵了。他说,没事,你刚才手指头怎么走的,代码就怎么写。
你这才意识到,刚才那三分钟不是浪费时间,是让你把那个路径刻在脑子里。
第四,它用体系代替碎片。
很多算法课是按知识点切分的。数组讲三节,链表讲三节,树讲五节,图讲四节。学完你会背每种数据结构的特性,但拿到一道综合题,不知道从哪下手。
左神的课不是这样排的。
他按“题型”排,按“解法”排。
讲完二叉树递归,下一节是“树形DP”。你刚学会怎么递归求树的高度,他告诉你,这个套路可以解派对的最大快乐值、可以解二叉树摄像头、可以解监控二叉树。
你不是在学单个题的解法,是在学一类题的通解。
刷题到后期,我遇到一道树形结构求最值,第一反应不是“这题我做过没”,是“这题能不能用左神那个套路”。
第五,它把“坚持”做成一个系统。
左神算法班有一个反常识的设计:它不要求你一次性听懂所有。
每节课最后五分钟叫“本节重点总结”,把四十分钟的内容压成五个要点。他说,这五分钟你记下来,今天听不懂没关系,三个月后回来看,你就懂了。
我那时候觉得这是场面话。
三个月后,我刷到一道滑动窗口最大值,卡了一小时,翻出左神那节课的回放,拖到重点总结,听了三分钟,写出来了。
那五分钟不是怕你听不懂,是怕你放弃。
后来我把这套课推荐给四个人。
第一个是我大学室友,转行学前端,算法零基础。他跟了两个月,小红书一面算法题是岛屿数量,他用左神讲的感染法,十分钟写出来。后来入职了。
第二个是组里的实习生,科班出身,但上课那几年净打游戏了。他边看边敲,把左神讲的排序全手写过一遍,面试美团二面,面试官考了道hard,他磕磕绊绊做出来了。回来跟我说:哥,那题左神讲过。
第三个是我表弟,还在上学,没到找工作的时候。我让他先跟着看,别管懂不懂,先看。他看到第四期,有天发消息:哥,我今天上课,老师讲快排,我会了。
第四个是我自己。
2022年,我被裁过一次。那阵子行情不好,面试机会寥寥。难得约到一个,手撕算法环节,我有点慌,手在键盘上发抖。
然后我脑子里蹦出左神的声音,是第一期讲对数器的那段:
“你别想结果对不对,你先想这个数组你拿到手里,第一步做什么,第二步做什么。”
我深吸一口气,写完了。
那道题我没被问最优解,只写出来基础版。但面试官点点头,说思路清晰。
后来我拿到offer,薪资没降。
左神算法班不是什么神仙课程。
它不讲读心术,不讲秒杀大厂,不讲“三周带你拿SSP”。它的课程简介只有一行字:
“从入门到求职,体系化搞定算法面试。”
但跟过的人知道,这句话背后是三百多个小时、一百多节课、上万行板书代码。
它不是让你从青铜变王者,是让你承认自己是青铜,然后给你一把锄头,指着山说:每天刨一点,总能刨过去。
2024年,有人整理了一份“程序员必看网课”清单,左神算法班被放在“算法”类目第一条。
整理者写了一句推荐语:
“如果你这辈子只看一套算法课,就是它了。”
我没留言,但点了赞。
因为我知道,那个2019年秋天连两层循环复杂度都算不清的人,现在能在leetcode周赛磕磕绊绊做完三道了。
他不是什么大神。他只是一步一步刨完了那座山。
而给他那把锄头的人,正坐在屏幕另一端,拿着记号笔,在白板上画着下一棵二叉树。
暂无评论