兩個月刷400道leetcode之後的經驗與心得總結、真題整理分享
- 2019 年 10 月 5 日
- 筆記
前言
隨著互聯網寒潮的到來, 越來越多的互聯網公司提高了面試的難度,其中之一就是加大了面試當中手撕演算法題的比例。這裡說的演算法題不是深度學習,機器學習這類的演算法,而是排序,廣度優先,動態規劃這類既考核數據結構也考核編程能力的題目。刷題的網址非常的多,其中以leetcode是最為出名的。
在刷題上,我花了大量的時間,蹚了許多的坑,總結了一下,主要有這三個問題:
- 刷過的題老是忘,第二次刷的時候還是不會做
- 刷題的速度很慢,即使花一天時間,也常常只能刷五六道
- 堅持不下來,老是刷到一半就停滯下來了,當我第二次再來刷的時候,前面刷過的題都又忘的差不多
說出來都是淚,感覺刷題這個路是真的難走,花了很多時間,但是感覺沒有什麼收穫。所以最近我一直在反思自己刷題的方法,希望能夠提高刷題的效率和速度。當我總結了以下方法以後,我很明顯的感受到自己的刷題速度從以前周末的一天五六道提升到周末一天刷十五六道以上,速度相比以前提升的非常明顯。
一. 我們來談談為什麼要刷題
- 面試需要。Google以及今日頭條等公司面試的時候,非常看重基本的演算法題目,leetcode 刷的不好第一面都過不了
- 刷題能夠提高自信。實際工作當中的程式碼論演算法複雜度遠遠低於刷題的難度,這麼難的題我都刷過了,何況工作的程式碼, 當然工作當中一般也用不到這些我們刷題的方法
- 大部分同學刷題能力需要提高。在面試同學演算法題的時候,三道演算法題能夠寫出一道的也不是很多
二. 如何快速刷題
由於我本人目前只刷了400道左右的題目,很有可能有更好的方法,歡迎大家賜教
- 確立計劃。比如在準備找工作的時候,明確就要60天刷leetcode 前400題,平均一周就要刷75題,可以周末兩天刷50題,周一到周五 每天刷5題,將問題分解下來,每天一定要完成任務才能睡覺
- 分解計劃。由於需要一周刷75題,提前規劃將本周需要刷的75題,整理成excel,刷完一題標記一下,一周完畢以後,可以看到滿滿標記的excel 非常的有成就感
- 快速刷題。初期一天刷五題其實也是很高的負擔,一般來說剛刷題,一題都至少要半個小時,一天五道的話,可能至少也要兩個半小時。所以我們在刷題的時候,為了節約時間,五分鐘沒有思路,就別浪費時間了,直接看答案. 另外一個原因,面試的時候,也不可能讓你思考很久。要明確認知,這個和高考刷題沒什麼區別,理解不了,先背下來。
- 組隊刷題。大家一起刷題,可以明顯的督促自己堅持下來,刷題這個本來就是堅持的過程。
三. 如何避免遺忘
- 及時重複。由於我們刷完題以後,遺忘曲線會遵從一個先快後慢的過程,所以要及時重複刷過的題,這個需要提前規劃刷的75題,我們會之後再講如何規劃每周的75題
- 與人分享。當我們刷完題以後,如果能講給別人聽的話,會大大加深我們的映像,在講給別人聽的時候,如果你能講的很明白,說明你是徹底理解了,但是如果聽的人始終沒有聽明白,那很有可能就是自己沒有理解這個題目,需要自己再回去思考一下這個題目的解法。
四. 如何提高面試環節當中刷題的表現
- 養成bug free 的習慣。寫完程式碼以後, 一定要仔細檢查,保證沒有思路問題,沒有下標越界問題,考慮各種邊界情況,沒有變數命名不一致等問題
- 掌握多種解法。演算法題面試,做出來是一方面, 如果能夠在這個題目上掌握不同時間複雜度的解法,然後再呈現給面試官,面試官自然會更加滿意的。假設一個同學在面試的時候,先寫時間複雜度和空間複雜度最高的方法,面試官很有可能會問你這個題目有更優的解法嗎,你再寫時間複雜度和空間複雜度稍低一點的解法,如果面試官繼續問你能不能更優化一點,你再寫出時間複雜度和空間複雜度最優的方案,面試官會認為你的思考是有深度的,如果一開始就寫出時間複雜度和空間複雜度最優的方法,面試官只是會覺得這個題目你以前做過而已。
五.結束語
- 刷題最重要的是速度和效率。短時間內高品質快速刷完才是最終目的,明確自己的認知,不要和題目死磕。
- 堅持下來。如果一個事情方向是正確的時候,即使一時遇到挫折了,也不要氣餒,多總結方法,持續提高。刷題這件事情給我的挫敗感是非常高的,中間是一度放棄了很久,但是當我想明白這道坎是一定要過的時候,就下定了決心一定要攻克這道難關,持續總結方法,持續進步。