背單詞法 LeetCode 刷題攻略

​“我方法的核心實際上和背英語單詞類似,總結題型,找到高頻題並且不斷重複。”


作為 LeetCode 的鐵粉並受益的刷題人,我認為掌握一套高效的刷題方法尤其有效,否則很難覆蓋日益增多的題庫,並且大多數時候刷完不久就會忘掉。所以我把當年刷題的經驗分享給你,希望我的方法也對你有用,希望我們能做同事。

背單詞法 LeetCode 刷題攻略

我方法的核心實際上和背英語單詞類似,總結題型,找到高頻題並且不斷重複。具體來講就是

  • 按 tag 分類
  • 艾賓浩斯記憶曲線,不斷重複刷過的題
  • 不斷總結掌握情況

為什麼這麼來操作是因為經過很多面試後,發現大多數題型還是比較基本和重要的,分佈在 medium 和 advanced medium 之間。而這些題目又可以演變出來很多不同的題,但萬變不離其宗,抓住本質並且熟練掌握即可。

背單詞法 LeetCode 刷題攻略


01 按 tag 分類


第一件事就是按照 tag 把題目分成不同的 list,一般每個公司為一個 list。一定要根據自己的刷題掌握情況來定製 list,這也是我這個方法保證對你有用的精髓。隨便從其他地方的舶來品基本沒用,因為只有自己才最瞭解自己的複習情況。如果你基礎比較差,之前沒怎麼刷過題或者是轉專業,我推薦的做法是額外分一個 basic list,意思是所有基礎的數據結構/算法都覆蓋一遍,這些題是一定要會的,基礎中的基礎。我把我認為基礎的 list 需要 cover 的內容分享在這裡(後面是題號)

  • DFS + memo 322
  • Backtracking 22
  • DP (DP DFS + memo) 55
  • BFS 286
  • Partition 86
  • Greedy 421
  • Sliding Window 15
  • Divide and Conquer
  • Graph 207 743
  • Tree
  • Binary Search


這個基礎的 list 基本上一定要涵蓋這些基礎知識點(面試必考)。私信我“刷題list”獲得我的刷題 list。


02 艾賓浩斯記憶曲線,不斷重複刷過的題


第二步就是著名的艾賓浩斯記憶曲線的運用了。考過託福/雅思的細心的同學可能發現了,這個實際上和記憶英語單詞有異曲同工之處 -- 先做 list,第二步我們要幹嘛?按 list 不斷複習,每天循環呀!這裡我用我的 Basic List 來舉個例子

背單詞法 LeetCode 刷題攻略

請注意觀察我的 Legend,一般表格的第一欄是留給 Legend 的,每次刷完我會記錄當前的狀態,方便日後鞏固。


如果是一次過的:就是直接 y;

如果中途有停頓,而且思路也不清晰的,寫 ?;

如果怎麼想也做不出來,看了答案的或做之前看過答案,就是 ※。


然後根據這些記錄的情況,第二天來安排不同的優先級和精力重新刷這些題,大家可以看到 168 我打了三個 ※,說明 3 次都不會,日後還需要繼續鞏固此類題型。對於那些 y 的題目直接過,基本上半年再來 review 一次。


03 不斷總結掌握情況


最後一步也是最重要的一步:總結。我們需要隨時記錄下當前刷題的狀態,然後每天在刷題時做到有的放矢:不浪費每一道新題,不重複任何一道已掌握的舊題。具體操作如下

背單詞法 LeetCode 刷題攻略

那麼問題來了,大家猜猜這是哪家公司的 List?


總結需要注意的關鍵點:

  • 總結 tag -- 這題我有哪些方法,哪個是最優解
  • 總結筆記 -- 有必要的話需要記下來哪裡有這題的筆記
  • 總結相似題型
  • 總結關鍵解題步驟


總結 tag 大致意思是說:這題大概有哪些方法可以搞定,以及自己最喜歡的方法。一般推薦兩種方法即可:基本的 brute force + advanced algorithm / data structure。注意這兩個都是必要的,我有經歷過背下來高級解法,結果基本解法不熟練最後被掛掉的面試。大家可能要問:看討論區那些 ACM 大神們的奇技淫巧太 NB 了,我是不是要全背下來?我的建議是大可不必,記住一個自己最順手的即可。而且注意:brute force 一定要熟練,在這個基礎之上才能開始研究高級一些的解法。

總結筆記,很多的題做了好多遍也不太會,例如我上面的 31,感覺要刷死人了還是不會。那沒有辦法,我只能把這個解法單獨拿出來,寫到紙質的筆記本上,有空就看一遍,推一遍,敲一遍。

總結類似題型,這個也很有用,因為往往類似題型都有一致的解法,只是越往難,越是在基礎解法上糅合了其他的算法技巧。有時候 LeetCode 上給的類似題型不準,我一般是參考之後再看看大家的建議,然後把所有的先總結出來,並且把相似的題鏈接起來。每次練習一起練,找出每種題型的基本差異。例如經典的買股票四連問題,建議大家試試看。

總結關鍵解題步驟。這一點很有意思,主要是說在遇到難題時,看完大神的解法之後自己總結出幾點關鍵步驟,這樣下次要是再卡殼了就可以直接看這個,想想之前自己是怎麼解的思路,而不是再去看其他討論。這樣循環往復個 2-3 次就能熟練記下來。例如 42 那題,我就寫了一個簡單的小提示,確保下次再卡殼可以看這個 tips 而不是翻看答案,從頭再來推一邊。從而提高刷題效率。


按照這個方法不斷練習,我保證你最差可以刷進 flag,因為不管是從以前別人面試我的經歷還是現在我面試別人的經歷來看,大家最看重的其實還是基礎算法知識是否牢固,即 medium 和 advanced medium 能否夠對答入流。

至於那些腦筋急轉彎式的 easy 和有很多高級技巧的 hard,實際上我個人感覺不是主要的考察範圍。除非是 ACM 參賽者,對於一般的 candidate 編程實際上就是一份工作,既然是這樣,那就找到合適的方法來應對。把更多的時間花在更寶貴的事情上,例如你喜歡的人和物上。


分享到:


相關文章: