1. 程式人生 > >LeetCode刷題的一點個人建議和心得

LeetCode刷題的一點個人建議和心得

目錄

1. 為什麼我們要刷LeetCode?

2. LeetCode的現狀和問題

3. 本文的初衷

4. LeetCode刷題建議

4.1 入門或者複習資料結構,打基礎階段

4.2 建立求職面試解題的思維,刷《劍指Offer》

4.3 系統性地開始刷LeetCode題目

 

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個月完成。(如果你對演算法充滿狂熱,或者說有很強烈的目標,並且肯付出大量的時間,個人感覺你完全能夠用3個月時間初步刷完一次。)

4.1入門或者複習資料結構,打基礎階段

        重點關注:陣列、字串、棧、佇列、二叉樹、連結串列、雜湊表、遞迴和動態規劃。弄懂基本理論,並會解答大部分的簡單題和部分的中等難度題。

        刷題方式:直接在LeetCode官網上面(具體操作見下圖),選擇資料結構專區裡面的相關章節進行編碼學習,建議耗時20天-40天。

4.2 建立求職面試解題的思維,刷《劍指Offer》

      《劍指Offer》共計68道題,建議每天平均完成3道題,耗時20天-40天。

        強烈建議要買書看,看看裡面的題目解題思路的講解,第一遍刷的時候不要死磕,但是一定要弄懂。在正式找工作前,一般刷個3遍左右比較完美,最好能夠做到對其中的題目擁有較強的手撕程式碼能力。

給出一份我在2019年上半年期間,採用Python語言刷的GitHub解答。

4.3 系統性地開始刷LeetCode題目

       針對LeetCode題庫裡的題目越來越多的問題,我個人依據考點對題庫裡面的題目進行了篩選,並對考點進行了細化總結,共計313道題,建議耗時90天-120天。

       我將按照以下順序推薦刷題:

       (1)重視對遞迴思想的理解和應用,遞迴是DFS和回溯法以及樹等知識點解答的基本能力要求。請參考部落格:LeetCode刷題總結-遞迴篇。

       (2)解決完遞迴的問題後,建議重視動態規劃、陣列、數學、樹和字串的刷題,其它知識點建議在上述五點內容之後開始刷,其中動態規劃問題和數學問題是演算法題的難點和痛點問題:刷題過程中,很可能讓你掉層皮。

       刷題推薦及順序(共計313題):

  1. 動態規劃問題(請點選,可以跳轉到具體部落格),共計54題
  2. 陣列問題,分上篇(17題),中篇(12題),下篇(14題)和番外篇(7題),共計50題
  3. 數學問題,共計40題
  4. 樹問題,分上篇(21題),中篇(17題)和下篇(9題),共計47題
  5. 字串問題,共計32題
  6. DFS、BFS和回溯法篇,共計13題
  7. 二分查詢和貪心法篇,共計16題
  8. 雙指標、位運算和分治法篇,共計14題
  9. 棧、連結串列、堆和佇列篇,共計20題
  10. 雜湊表篇,共計12題
  11. 排序、並查集和圖篇,共計15題

       初步刷完上述的313題後,可以考慮開始參加LeetCode每週的周賽,以比賽來敦促自己的演算法刷題過程,同時激勵自己的演算法刷題興趣。後續,開始針對自己的易錯點,依據LeetCode上面的考點標籤題庫選擇合適的題目進行鍼對性地練習。

       最後,如果看到本文的同學已經開始步入了找工作的時期,沒有系統和完整的時間來完成300多道的題目。個人建議,只需要把《劍指Offer》刷2-3遍,另外把LeetCode網站推薦的LeetCode熱題Hot100刷完1-2遍即可。