如何正确高效地使用 LeetCode/LintCode 刷题?
拿到 offer 的第二天。期间投了 20 余份简历,经历 16 场面试,最终拿到 4 家 offer ( 1 家桃厂,还有几家小厂),在知乎上刷到这个问题,和大家分享一下我的LintCode刷题经验,希望能给到大家一些参考。
先介绍一下本人的情况,本科学的是信息管理。一开始想找 Data 方向,后来投了几份简历都石沉大海,就决定转码了。我的漫漫刷题路就这样开始了,前后大概用了 6 个月,主要针对的是面试的算法题。
正文来啦~
本文分为以下三个方面:
- 前期准备
- 刷题步骤
- 刷题技巧
一、前期准备
刚开始刷题的时候也是很没头绪,因为网站上的题目真的很多。像我在用 LintCode 刷题的时候,单是算法题就有 1300+,全部刷完是不可能的(至少我做不到),估计花几个月刷完一遍,不会的题还是不会。
首先 是要根据自己的情况制定计划,后续才能有针对性的刷题。
其次 就是要选择一个自己熟悉的语言进行练习,我选的是 Java,练下来觉得还是很适合我这种转码型选手的。
第三 刷题绝对不能心急,因为刚开始刷题真的很打击人,一定要摆正心态,掌握基本知识和解题方法才是最重要的。
我在指定计划之前问了自己几个问题: 1 、我为什么要刷题? 2 、自己本身都掌握了什么? 3 、我能不能坚持下来?
我主要针对面试刷题,之前的课程有涉及数据结构,Java 和分布式系统,掌握的也都还可以。必须得坚持下来,十几年的学习就是为了找工作,千万不能在最后关头出岔子啊~
之后我先把简单和中等题目都各刷了 5 题,决定把中等题作为重点练习,简单作为辅助,最后阶段再冲刺一些困难题。
前两个月基本保持在三道 Medium 再加一道 Easy 。精刷,主要是为了把我的基础打扎实,原本基础就好的可以在适量增加练习量,我在后面几个月就是适量增加几道 Medium,偶尔来一道 Hard,没有花大量时间练 Hard,因为面试开发岗用不到这么多难题。
(Lintcode的筛选功能)

二、刷题步骤
Step1 、 拿到题目的时候自己先思考,给自己一个充裕的思考时间,甚至可以花几个小时的时间去思考。看到有些童鞋说自己比较忙没时间,我觉得不妨可以把一些暂时没想出来的题目放在脑海里,拿出平时的空余时间去思考,这都是一个刷题的过程。比如上班的路上想一想,午休一个人吃饭的时候也可以思考一下。利用好碎片化的时间,并且懂得给自己思考的时间。
Step2 、 学会记录自己思考的过程。刷题的重中之重就是学会如何思考,这不仅有益于平时的解题,在和面试官交流的时候也能比较清晰的把自己的思路表达出来。其实面试的时候,能不能解除题目是次要,如何思考问题和表达才是面试官更看中的。
Step3 、 分为两个情况:
1 、题目做不出来: 如果花了足够多的时间还做不出题目,这时候可以去看看解析是怎么说的。看看自己对对应的知识点是不是真正的理解。看完以后再试着解一遍,不熟练可以用 IDE,之后最好还是再白纸上或者用 Xcode 解题。
2 、题目自己做出来了: 照着答案再看一下,看看能不能自己再优化。之前也看了很多刷题经验,都建议少用 IDE,所以在解题的过程中我基本上都先自己解在LintCode的笔记里,实在写不出来的时候再打开 IDE 。

Step4 、 敲重点!!!每周都留一天复盘一下之前做过的题,复盘的时候一样要把思路记录下来。这样才能不断培养自己的 Coding Style 和 Bug free 的能力。
三、刷题技巧
1 、不同阶段采用不同的刷题方式。
刚开始我根据 tag 刷题,把一个 tag 里面不同难度的题吃透,后来我就用 LintCode 里面的Ladder 刷,里面有中美各大知名企业的面试真题。而且按照闯关的模式,刷题会更有动力。

2 、找一些辅助工具。
刷题其实还是为了能熟练地掌握一些题型,在遇到不会的知识点的时候还是需要看一些辅助的书籍或者课程。
还有一些辅助的书籍和网站,比如剑指 offer,Quaro,GitHub 这些论坛也可以逛一下。
3 、一边刷题一边投简历。 刷题最终还是为了面试,真正面试的时候和自己平时做题还是不一样的,多面几次以后,感觉面试官的套路好像都差不多,知道怎么在面试官面前表达自己再加上后期对题目的一个熟练度,拿下 offer 其实真的没有之前想的这么难。
4 、一定要保持一个良好的状态刷题。
实在不想做或者做不下去的时候要给自己休息。很多人觉得休息会有罪恶感,感觉一休息别人就会超过自己,实际上累的时候你只会盯着题目发呆,还是浪费时间。
写的时候是想到哪儿写到哪儿,可能不太全或者有点啰嗦,但是还是希望能有一些帮助,冲冲冲,祝大家早日拿到心动的 offer 啊!!!
动态规划
交叉字符串
最长公共子序列
背包问题
排列
二叉树的前序遍历
N 皇后问题
用递归打印数字
树结构
单词地压缩编码
实现 Trie
映射配对和