发布于 2025-03-18 15 阅读
0

一年坚持学习 LeetCoding

那是 2023 年 9 月,变革即将来临。我发现自己正处于失业状态,而且幸运的是,谷歌刚刚在肯尼亚内罗毕掀起了一波招聘潮。我偶然发现了谷歌 Foobar 挑战赛,这是我听说过的一项编程挑战赛。凭借十年的编程经验,我觉得是时候尝试一下了。

第一个挑战就像是热身——一道二分查找题,感觉就像慢跑一样。第二道和第三道题也同样如此,既容易应对又引人入胜。但随后,第四个挑战出现了,它就像是爬上一座陡峭的山坡。这是我对图表的入门,这个概念在我的职业生涯中一直没有得到解决。

我感到有点不知所措,于是转向 YouTube 寻求指导。当我观看解释算法和概念的视​​频时,我不禁感到一丝冒名顶替综合症。我当了这么久的软件工程师,怎么会没有遇到这些问题呢?

长话短说:一位谷歌招聘人员确实联系了我。我进行了电话面试和三轮面试。不幸的是,我没能通过。但这次经历激发了我掌握数据结构和算法 (DSA) 的热情。

为了提高自己,我找到了 LeetCode 75 题集。我满怀热情地攻克它,做笔记,学习大量知识。在攻克一半时,我签下了今年的第一份合同,这意味着我练习的时间更少了。为了不断鞭策自己,我开始做 LeetCode 的每日挑战。这最终让我连续 365 天都坚持下来。

我在 Google Sheet[ https://docs.google.com/spreadsheets/d/14GXh2RLulTo2vLeLzOuOqqCm5DQmCI-OK8MJvi9yJz8/edit?usp=sharing ] 中追踪了每一个问题。我的系统很简单,如果我不能在规定时间内解答,我就把它标记为失败:

  • 简单:25 分钟内解决

  • 中等:45 分钟内解决

  • 困难:1 小时内解决

每隔两周,我就会重新审视一道失败的题目,并再次尝试。以下是我在这一过程中学到的东西:

有些话题比其他话题更常出现

数组(列表)

关注 (PrimeAgen)[ https://www.youtube.com/@ThePrimeTimeagen ]?那么您就知道数组是 DSA 的基础。一年后,我可以保证这一点。高效的数组操作至关重要。

字符串

字符串类似于数组,但有一点不同。在大多数语言中,它们是不可变的,这意味着任何更改都需要创建一个新的字符串。这是一个惨痛的教训。

哈希表

在映射数据时,哈希表是首选,因为插入和删除的复杂度为 O(1)。最初,我认为哈希表很复杂,但后来我了解到它们本质上是对象。

排序

了解至少两种排序算法。冒泡排序是经典算法,而且编码速度快。归并排序功能强大,但需要练习。还有桶排序——速度快得惊人,但占用空间大。

贪婪算法

贪婪问题很有趣。它们允许在满足条件后提前退出。这些问题有时仍会让我犯难,但解决它们还是很有回报的。

结论

DSA 可能会让人上瘾。一旦你开始发现规律,解决问题就几乎变成了机械式的。我希望有机会在谷歌再试一次。在那之前,我会继续努力学习 LeetCode,提高这门手艺。