1.
競賽題 或者 面試題 Medium Hard 以上題目,一開始在第一時間想不出解題思路,或者最佳解是很平常的事情。
通過官方解答、討論區的高手分享解題,進而學到新的解題思路,或者更泛用的演算法框架,就是最大的收穫。
2.
但是Easy分類的題目,通常就是該領域最基礎的題目,應該要會。
如果想不到,可以試著從約束條件、進階提問follow-up、或者Hint尋求幫助。
如果還是毫無頭緒,很可能是基礎知識不足,需要先找一本看得懂,可以吸收的教材(比如說原本學校教過的課本,或者MIT、哈佛、史丹佛、Coursera...等國內外大學、教育平台的網路公開課)
如果是知道該用什麼演算法,但是實作coding就是卡卡的,東漏西漏,常常報compile error,很可能是程式語言的特性還不熟練,這點就需要回去加強練習該程式語言的基本語法與函示庫。(例如C++和其互相搭配的STL)
3.
練Leetcode題目時,不需要土法煉鋼式的從第一號題刷到最後一題,因為題目編號並沒有照難易度排,也沒有照分類排。
建議有條理的練習,有分類的練習,一般入門、練手感建議從基本的Binary Tree、Array、String、Math...等標籤分類開始,接著開始練習專門領域DP、Greedy、Divide and Conquer、Sliding window、Two pointers、Graph...等。
從Easy 開始往Medium邁進,Hard有多餘時間再做,太難的往往遇到機會也比較低,或者太過於刁鑽。
4.
學會的題目,在第一次通過之後的兩~三天,務必在不看答案的情況下再做一次,加深印象並且強化、鞏固知識點(這點和大腦的自然遺忘曲線有關)。
做題目依該像蹲馬步,基本功穩健,先求演算法徹底理解、熟練,之後才逐漸開始衝刺題目數量。
在不熟練演算法、資料結構、程式語言特性的情況下,盲目地刷題只是徒勞,耗費一堆時間,看了很多但是也忘了很多,而且也不紮實。
妥善利用 Leetcode建立好的學習卡片,針對某個領域去加強練習,熟悉演算法框架。
5.
試著輸出。不論是教其他同學,或者畫圖、做筆記都是很好的方式。
Teaching is learning.
當你能把另一個人給教懂,徹底理解,並且說明其精隨與關鍵知識點,說明你已經掌握這道題目的考點、可能的變化衍伸與演算法、資料結構...等相關背景知識。