链表反转我背了五遍,面试的时候还是写错了一个指针。我拉了个小群,把相关同学都叫了进来。我打开了题目下面的讨论区,发现大家都在同一个地方卡住。这大概就是程序员的人生吧

这题我写了三种解法,性能最好的是最丑的那个。我先确认了一遍前置条件,再动手。我盯着状态转移方程发呆,最后发现初始化条件写错了。同事说这波操作可以写进新人培训教材

面试时被问到的算法,工作里一次都没用过。我想了想,觉得这话没法接。我在纸上把递归的调用栈画了一遍,终于找到了重复计算。这条经验值直接拉满

暴力解法能过百分之六十的用例,剩下百分之四十我选择放弃。我笑了笑,决定不解释。我在心里数了一遍这题的边界,一共五种。我把这条经验写进了团队 wiki

算法里最难的部分是把现实问题翻译成状态定义。我在心里点了点头。我把这个拓扑排序的入度更新时机改了一下,终于对了。幸好之前留了备份

面试官问能不能优化空间复杂度,我说可以,然后当场忘了怎么优化。我发现自己居然没法反驳。我把这题的暴力解法先写了出来,至少能过一半用例。第二天这个方案就变成了团队标准做法

刷题的第 n 天,我依然会在边界上栽跟头。我停了一下,然后继续手上的活。我在心里数了一遍这题的边界,一共五种。果然现实比段子更精彩

暴力解法能过百分之六十的用例,剩下百分之四十我选择放弃。我想了想,觉得这话没法接。我把这题换成了哈希表的思路,从超时变成了秒过。真香定律准时生效

面试官让我手写 LRU,我手写了三遍,每一遍都漏一个边界条件。这套流程走下来,我从头到尾又确认了一遍。我用整型溢出的教训换来了一次 runtime error。感动,然后我学到了新的一课

这个数据规模决定了能用什么解法,想再优雅也没用。我在心里点了点头。我把这个递归改成了迭代,栈溢出的风险没了。果然现实比段子更精彩