LeetCode高效刷题指南
想要拿到理想offer,只掌握基础知识显然不太行。见多识广,才能从容应对技术面试。我们刷LeetCode的目的不仅只是记住答案,刷LeedCode的成果也不仅只有题目数量,最重要的是学习问题的解答方式,这样才能举一反三,灵活应用在该类型的其他题目上。
“简单”的题目
这个级别的题目旨在帮助大家熟悉基本技巧。通常来说,它们有一些简单粗暴的解答方法,我们需要学习的,则是应用这些小技巧来改进自己略显粗糙的解题方案。
考察点:练习基本技巧
当我们随机点开一道数据结构或算法的简单题目,能在几分钟内列出最优解决方案并完成它们,那么我们就出师啦。
1. 参考“通过率”,虽然都是“简单”级别的题目,但是通过率较高的问题相对更容易解决。
2. 尝试在没有提示的情况下解决问题,哪怕是略显粗糙的答案,毕竟Done is better than perfect。
3. “Run Code”按钮非常诱人,但倘若我们总是习惯性点它,对提升能力没有多少帮助。我们的目标是“一次过”,毕竟这更实际地模拟了白板面试——我们只有一次机会。所以,尽量迫使自己思考全面,反复执行代码是不可取的。
4. 研究优秀解法中,那些可以优化答案的小技巧。没必要羞涩,不懂的地方积极提问就好。有时候票数最多的答案不一定是最适合你的,一些很棒的答案可能因为篇幅较长,回答时间等问题被排在稍微靠后点的位置。
“中等”的题目
这个级别的题目旨在锻炼大家看穿问题的能力,它们通常是一些简单题目的“伪装”或“变化”。使用简单粗暴的解决方法可能会导致答题超时。我们需要学习的是分辨问题,并找出正确的解题方式。
考察点:识别问题及解题方式
随机点开一个数据结构、算法的中等题目,如果我们能找出它们掩盖的问题,并可以在半小时内写出接近最优的答案,那么我们就可以适当挑战困难级别的题目了。
1. 仔细阅读问题中的每个单词,寻找其中的提示,不要被“似曾相识”的感觉欺骗。
2. 掌握了答题的大致方向就成功了一半。我们需要尝试着写出至少一个次优解,答案不是完美的没有关系,毕竟人们花了很多精力来优化他们各自的答案。
3. 当成功写出次优解时,我们就可以挑战最优秀的解决方案了。看看自己的答案有哪些可以改进的地方,研究一下同一道题的其他解法。
4. 最后,试着吃透其中的思维过程,不看提示,根据自己的理解做出最优答案。
“困难”的题目
这个难度的基本是拔高题,它们的目的是让小伙伴们精益求精,挑战自己。通常情况下,45分钟的时间几乎不足以让我们写出一个完整的答案。我们需要学习的,是确定解题的正确方向。
考察点:“毕业审查”
困难级别的题目通常有一些限制,它们不适用通用的典型技巧。对于这些题目,答题时限显得不那么重要了。我们需要学习的是,如何建立起“典型技巧”通往“限制条件”的桥梁。
1. 困难级别的问题可以暂不考虑最优答案,我们从成功解决问题开始,也可以适当取消答题的时间、空间限制。
2. 思考最优解需要满足的限制条件。如果自己的答案很难改进,那么是时候参考最佳答案了。理解思维过程是其中最重要的部分,尝试着理解如何处理题目中的极端情况。
3. 举一反三,做不到最佳,“第二好”也很棒,尝试着用次优解来应对其他困难级题目。
针对不同级别的题目,我们有不同的侧重点。除此之外,还有一些通用的小技巧:
关于标签分类
如果觉得自己在某个算法上比较薄弱,可以通过“Tag”来过滤筛选问题集。但是,在平时刷题时,不太推荐这样按照标签分类练习。因为我们希望锻炼的能力还有识别问题的算法类型。例如,当我们点击标签”二分查找“后,就知道过滤出的问题的解法,很可能为二分查找。
关于赞成和反对
打开一个问题,我们可以看到有多少人赞成或反对它。适当避开那些赞成/反对比例低于2:1的问题,尽可能选择比例高于4:1的高质量问题。
关于刷题时间
“七天每天一小时“的效率明显高于”一天七小时“。坚持每天刷题,使自己一直处于”编程状态“。最后,做好相应的规划和总结。