有一段时间没有更新 LeetCode 打卡帖了 ,其实自己有偶尔刷题 ,但是没有写成文章记录分享出来 ,主要还是自己懈怠了 ,另一个重要原因就是写这记录帖比较费事却没多少人看 。最近想了想 ,关于刷题做了一些浅显的思考 。
首先 ,为什么刷题呢 ?当然是想着提高自身能力 ,在算法笔试面试中脱颖而出 。那么问题就来了 ,算法面试他面的只是一个具体的题目吗 ?
很显然不全是的 ,相信有人在面试中几乎做出了所有题却与 offer 擦肩而过 ,也有人并没有完美攻克所有题目却最终拿到了心仪的 offer 。至少和实验室有经验的学长同学沟通发现是有这样现象的 !
有人说 :算法面试优秀不意味着技术面试优秀 ,技术面试优秀不意味着能够拿到 offer 。的确是这样子 ,几个题目就能确定一个人的能力吗 ?不全然 !更多的时候 ,感觉技术面试不能局限于一个题目 ,局限于能否做出来正确结果 。而是考验一个人的思考方式和思考方向 。
举几个例子 。第一 ,很多题目不只有一个解法 ,暴力穷举可以解决 ,巧妙技巧也并不缺乏 ,能否做出正确结果还真不是最关键的 。更优秀的代码(例如时间空间复杂度的优势)肯定更能吸引到面试官的注意也能从一定程度上证明你的过人之处 。第二 ,许多题目会有多种特殊情况或者边界问题等 ,代码整体思路是对的 ,却总有通不过的样例 ?往往就是在这些特例上撞了墙 。再比如排序问题 ,方法很多 ,但是能简单的说快排就是最快的吗 ?事实上 ,数据的特征不同 ,采取不同的排序方法谁优谁劣真不一定 。有没有可能包含有大量重复的元素?原始数据有序度如何等等都值得思考 。
所以啊 ,平时还真不能局限于 " 做出来就好 " ,而是要多思考 ,多种思路并且更加全面才好 !小詹觉得面试官更加看重的也许就算思考能力和逻辑能力吧 。
那么 ,怎么刷题呢 ?在线刷题系统其实不少 ,以 LeetCode 为例 ,难度分 3 档 ,并且每一题都有序号 ,是从前往后 ?还是从易到难 ?遇到难题 ,是死磕到底还是瞟一眼别人的代码 ?
其实每个人习惯和想法不一样 ,不好说哪一个更好 。小詹分享下自己的看法如下 。
刷题顺序 。之前是粗暴的从前往后 ,但是自己想了想更推荐一个专题一个专题的进行 。比如数组 、链表 、队列 、动态规划等等 ,一个一个的攻克 ,没必要每一题都刷 ,挑一些经典的具有代表意义的 。以数组为例 ,题目使用较多的方法有二分 、双指针 、回溯等 ,就可以考虑每一类数据结构的每一种方法挑选几题仔细攻克 ,比广撒网也许更好一些 。
刷题习惯 。遇到简单题目也许很快就有思路并写出来正确代码了 ,但是更加建议即使是简单的题目也思考下多种思路 。当然小詹推荐花大精力刷中等难度的题目 ,太简单和太困难的可以先放过 。遇到难题也不要马上就去看别人的代码 ,看懂别人的和自己写出来是两回事 ,先自己尝试思考 ,如果多种思路都尝试了依旧不行可以去看看别人的思路 ,看懂后最好自己复现一下 。
分析笔记 。其实看对某个题的掌握程度最好方法就是让自己跟别人讲解分析 ,教会了别人 ,自己一定印象深刻 ,因为这会大脑思考转的非常快 !所以做笔记分析思路是个很不错的习惯 !
一家之词 ,多多思考探索自己的方式 。也欢迎留言区分享你的刷题顺序 和技巧 ,也许能给别人带来一定启发噢 !