目錄
1. 為什麼我們要刷LeetCode?
LeetCode是面向找IT工作開發崗/演算法崗的基本題庫,想去BAT等大廠,筆試和麵試中的大部頭都要考你演算法題的解題技巧和編碼能力。然而,對於很多大一大二在校的本科同學,甚至包含一部分研究生同學,都會問一句:LeetCode是啥?該部分同學一般都是在臨近找工作時,尋找相關經驗貼才知道原來還有這樣的一個神奇的網站。隨著IT相關專業,大多數轉專業同學都瞄準了網際網路方向的崗位,以及計算機學科招生和熱門化,導致內卷越來越嚴重。因此,為了提高個人的核心競爭力,提前Or開始刷LeetCode,從而開闊自己的演算法思維,並提高自己的編碼能力,能夠大大增加我們獲取理想Offer的機會。
2. LeetCode的現狀和問題
LeetCode網站剛開始建立時,題庫內部共約800道題,其中的題目基本都是來自谷歌等網際網路大廠的面試筆試真題。然而,隨著網站的發展,題庫裡面的題目數量也在逐步遞增,截止2020年10月4日,已累計1822道題。後期,基本還會以每週4-5道題的數量遞增。從而導致:
(1)題目量越來越大,想半年Or一年全部刷完,很難!或者說,不現實,付出和收入很難成正比。
(2)考點方向也多,不知道從哪裡入手,讓人感覺很迷茫。
(3)如果盲目地每天隨機刷幾道題,會出現:隨著時間的推移,幾周前答錯的題,如今重寫,依然大概率會錯。即可能出現:竹籃打水一場空的問題。
3. 本文的初衷
本人大三系統學習和刷過演算法題半年多時間,另外在研二上學期也刷過三個多月的LeetCode。對於LeetCode的刷題也有一點個人的經驗和心得,在記錄自己過去學習過程的同時,也希望對初步踏入LeetCode刷題之旅的同學有點幫助。本文的重點物件:大一大二的本科生,以及研一就下定決心打算找工作的同學。如果正在看本文的你,有著ACM等演算法比賽經歷的同學,就當作參考看看吧>~<。
4. LeetCode刷題建議
分三步走策略,第一次刷題建議4-6個月完成。
4.1入門或者複習資料結構,打基礎階段
重點關注:陣列、字串、棧、佇列、二叉樹、連結串列、雜湊表、遞迴和動態規劃,弄懂基本理論,並會解答大部分的簡單題和部分的中等難度題。
刷題方式:直接在LeetCode官網上面(具體操作見下圖),選擇資料結構專區裡面的相關章節進行編碼學習,建議耗時20天-40天。
4.2 建立求職面試解題的思維,刷《劍指Offer》
《劍指Offer》共計68道題,建議每天平均完成3道題,耗時20天-40天。
強烈建議要買書看,看看裡面的題目解題思路的講解,第一遍刷的時候不要死磕,但是一定要弄懂。在正式找工作前,一般刷個3遍左右比較完美,最好能夠做到對其中的題目擁有較強的手撕程式碼能力。
給出一份我在2019年上半年期間,採用Python語言刷的GitHub解答。
4.3 系統性地開始刷LeetCode題目
針對LeetCode題庫裡的題目越來越多的問題,我個人依據考點對題庫裡面的題目進行了篩選,共計313道題,建議耗時90天-120天。
我將按照以下順序推薦刷題:
重視對遞迴思想的理解和應用,遞迴是DFS和回溯法以及樹等知識點解答的基本能力要求。請參考部落格:LeetCode刷題總結-遞迴篇。
解決完遞迴的問題後,建議重視動態規劃、陣列、數學、樹和字串的刷題,其它知識點建議在上述五點內容之後開始刷,其中動態規劃問題和數學問題是演算法題的難點和痛點問題:刷題過程中,很可能讓你掉層皮。
刷題推薦及順序(共計313題):
- 動態規劃問題(請點選,可以跳轉道具體部落格),共計54題
- 陣列問題,分上篇(17題),中篇(12題),下篇(14題)和番外篇(7題),共計50題
- 數學問題,共計40題
- 樹問題,分上篇(21題),中篇(17題)和下篇(9題),共計47題
- 字串問題,共計32題
- DFS、BFS和回溯法篇,共計13題
- 二分查詢和貪心法篇,共計16題
- 雙指標、位運算和分治法篇,共計14題
- 棧、連結串列、堆和佇列篇,共計20題
- 雜湊表篇,共計12題
- 排序、並查集和圖篇,共計15題
初步刷完上述的313題後,可以開始參加LeetCode每週的周賽,以比賽來敦促自己的演算法刷題過程,同時激勵自己的演算法刷題興趣。後續,開始針對自己的易錯點,選取LeetCode上面的考點進行鍼對性地練習。
最後,如果看到本文的同學已經開始步入了找工作的時期,沒有系統和完整的時間來完成300多道的題目。個人建議,只需要把《劍指Offer》刷2-3遍,另外把LeetCode網站推薦的LeetCode熱題Hot100刷完1-2遍即可。