Leetcode學習

1. 刷題方法

  自頂向下 VS 自底向上。兩種方法各有優劣。那怎麼才能達到最好的學習效果呢?

  入門時使用自底向上的學習方法,以玩遊戲爲例,瞭解了基本的遊戲規則,然後就先玩起來,在玩的過程中逐漸熟悉。但這樣的玩法,必然會在一定階段遇到瓶頸,問題的本質在哪裏,那如何解決呢?

  深入時再對對應的章節採用自頂向下的學習方法。比如通過閱讀算法的參考書籍,如圖解算法、算法(第4版)。

1.1 第一遍(第一次梳理思路,可依賴)

  自己獨立思考,理解題意,明確邊界條件。基礎薄弱(刷題少於100道)的同學,思考時間不超過15min。基礎穩固後,思考時間不超過5min。如果有思路,先比較幾種思路的優劣,然後寫出每種思路的僞代碼(等到一定層次時,只需要寫出最優代碼的僞代碼)。如果沒有任何思路,不知道從何下手,則直接看解法。同時注意比較多種算法的優劣。

  學習算法最重要的是理解。如果沒有思路,學習別人思路以後,首先要把思路和關鍵點列出來。如果暫時做不到,那就通過背誦、默寫好的解法或者思路(前期實在不會,可默寫或者背誦具體代碼(1~2種實現代碼),後期以理解思路爲主)。最後一定要用語言表達出解題思路。

1.2 第二遍(實現)

  在不參考代碼的基礎上,將多種思路進行實現,並在Leetcode上提交,不斷Debug修改。

  如果最優算法也未能戰勝前80%的人,則跳回第一遍,看別人的優秀代碼,分析具體原因(是算法架構不對,還是實現細節不好)。然後實現代碼,並提交Leecode。

1.3 第三遍:(在第2遍的基礎之上,過了24小時之後,做前一天做過的題目)

  首先假設旁邊就是面試官,把基本思路給面試官講解一遍。然後重複實現一次最優代碼。並閱讀新的一個實現代碼,並進行客觀評價(時間和空間複雜度、實現細節等)。

1.4 第四遍(第3遍過了一週之後,反覆回來練習相同的題目,同時對於不熟練的題目進行專項練習)

  首先假設旁邊就是面試官,把基本思路給面試官講解一遍。然後重複實現一次最優代碼。並閱讀新的一個實現代碼,並進行客觀評價(時間和空間複雜度、實現細節等)。

1.5 第五遍 (總結歸納)

  可在參考教材、視頻的基礎上,對已有的題目進行歸納總結。

1.6 第六遍 (針對面試,面試前一個星期、兩個星期進行恢復性訓練。)

  複習知識圖譜(知識框架),然後將之前容易犯錯的題目再做一遍。

2. 做題要點

  1. 理解題意(如果是現場面試,則要和麪試官多溝通,確保理解題目準確)
  2. 枚舉方案(列舉所有可能的解法),比較不同的方法時間、空間複雜度的區別,從中找出最優解法。
  3. Coding 寫代碼(最優方法)。
  4. Test cases 通過測試樣例來進行測試。

算法
數據結構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章