你們好,我是負雪明燭。今天跟你們聊一聊「LeetCode應該怎麼刷?」這個話題。git
我是大二的時候開始接觸 LeetCode 的,那時候 LeetCode 只有 400 題,我原本打算天天作 1 個題,可是因爲當時以爲題目太難沒堅持下去。在大四考研後和研一研二的兩年左右的時間,我刷了 700 多道題(如今已經800多),而且大多數題目作了 2~3 遍。那麼我是怎麼作到的呢?github
剛開刷 LeetCode 時遇到二叉樹翻轉,想了一天也沒明白,當時無比痛苦。由於個人方法不對,我總想着在腦子裏面想明白再寫,在白紙上不停地模擬二叉樹樹翻轉的每一步,還想着用本地 IDE 寫個二叉樹結構進行Debug,如今看來都是走了彎路。面試
大部分新手應該是隻學過課本上的一些數據結構和算法的知識,尚未實際刷題經驗,所以很是痛苦。算法
對於新人而言,不該該本身死摳一個題目,若是想了一會沒有任何思路,就應該果斷看別人怎麼寫的。在理解了別人的作法以後,再憑理解和記憶在 LeetCode 的代碼框裏敲一遍。數據結構
學習 = 學 + 習。知識是學出來的,不是在本身腦子裏蹦出來的;學過以後,還要本身動手練習。新手要勇敢地、常常地學習別人的解法和答案,而後憑理解敲代碼練習。只要度過刷題初期的痛苦,後面就會越刷越快。數據結構和算法
須要掌握經常使用的數據結構和算法的思想和適用場景。ide
學習基礎知識,我推薦 《算法(第4版)》。這個書不用所有細看,能夠只看重點,好比前面的 Java 知識不用看,數學推導部分能夠不用看。學習
再推薦一本侯捷的 《STL源碼剖析》,這本書對理解C++ STL有重大幫助,看了以後絕對會對數據結構和算法有更深的理解,我看完這本書以後感受相見恨晚啊。網站
合理的刷題順序能下降難度,幫助咱們在有限的時間裏得到最快的成長。搜索引擎
LeetCode 如今將近 2000 道題,基本沒有人可以所有刷完,並且對於參加面試者來講也沒有必要刷特別多的題。許多人在面試前刷了 200 道題,基本夠了;準備更充分的人,大概會刷 400 道題;能刷 600 道題目以上的,基本上國內公司的 Offer 都能收穫到一大堆。
我推薦的刷題順序的規則是:
若是基本上能作到 Easy 題 100% 能作對,Medium 題通過思考或與面試官交流後能作對,基本就能拿到 Offer。在實際面試過程當中,不多出 Hard 題,視能力刷。
向別人學習是很是必要的。
主要看別人在解決這個題目的思路是什麼。不管這個題你會不會,都要看下別人的解法,或許有新收穫。
推薦的博客做者有:
最近我在刷中文版的力扣,題解區的答案質量很是高。比較推薦的博主有:力扣官方題解,負雪明燭,李威威,zerotrac,Krahets,笨豬爆破組,甜姨。
我恬不知恥地推薦一下本身(負雪明燭)的題解,我最近已經連續在中文力扣日更「每日一題」題解 20 天。最近利用動圖幫助你們理清作題思路,點贊和閱讀數都比較高。
除了題解區之外,若是想看博客上面的題解,能夠用搜索引擎搜題目和博主名。想看負雪明燭的「two sum」題解,那麼搜索方式就是在關鍵詞以後加上「fuxuemingzhu」:
這部分包括算法講解、套路整理、刷題模板等。
「算法題 = 思路 + 模板」,思路須要經過看別人的解答以及講解得到,模板就是作題的套路,既能夠本身總結,也能夠看別人總結好的。
好比負雪明燭的【LeetCode】代碼模板,刷題必會。
也好比說 AlgoWiki :
固然推薦每一個人在作題的過程當中都整理一份本身的總結,用本身的方式總結好知識點和模板。
寫做過程能更好地幫助咱們理清思路,也能幫助咱們再作此題時快速想起之前的作法,還能見證咱們本身的成長。
在五六年前我剛開始刷題時,就把每一個作過的題目記錄在CSDN上,如今個人博客瀏覽量已經將近 161萬 了。
任何題,不管難度,我都記錄題目、想法、代碼。雖然常常寫博客的時間比寫題的時間還多,可是把本身的想法講解一遍纔是真的懂了,更方便了本身以後看、以及你們交流。常常看到本身幾年前寫的愚蠢代碼,而後感嘆本身確實有進步了。
在 B站 有個小姐姐講了小白如何上手LeetCode,也演示瞭如何用 iPad 作筆記,值得一看。
程序媛分享 | LeetCode小白如何上手刷題?iPad學習方法 | 刷題清單 | 新手指南 | 刷題找工做 | IT類
刷題最大的障礙是本身。特別是新手,極可能因爲剛接觸 LeetCode 感受太難就沒有毅力堅持下去,致使半途而廢。並且,刷題更重要的是堅持,作題的感受都須要手感進行保持的。
因此,若是能有個組織交流和監督就行了。
我組織了「每日一題交流羣」的活動,而且作了個網站 https://ojeveryday.com 來監督你們打卡。在網站上提交力扣我的主頁就能進羣,羣裏的規則是天天同步力扣的每日一題,而後你們交流作法。羣裏還會組織模擬面試、週末直播講題等活動。因爲進羣前須要提交本身的 LeetCode 我的主頁,而且羣主管理嚴格,因此羣裏沒有任何廣告。刷題羣已經持續將近一年,歡迎你們加入。
事實證實這種你們一塊兒作同一道題目,而且一塊兒交流討論的氛圍很是好。
2、提升篇若是你已通過了小白的階段,那麼應該作些提升項目。
所謂周賽,就是每週日上午,LeetCode 組織的一場比賽,總共 4 道題,通常是 Easy 一道,Medium 兩道,Hard 一道。中英文網站同時開始,題目相同。每隔一個週六晚上有雙週賽,題目和周賽相似。往屆競賽也能夠點擊參加作練習模擬。
作周賽的目的是檢驗咱們的學習成果,畢竟這些題目都是新的,就像考試同樣。
不要擔憂本身作不出來,只要盡力而爲就行了,我通常的目標是解決前三道,第 4 道 Hard 作不出來也沒有心理負擔。
參加完比賽以後,看下別人的解答,由於這幾個題目都是本身苦思冥想過的,所以學習和進步地都挺快。
我最好的一次周賽成績是全球 28 名,當看到本身的 id 顯示在了全球排名的第一頁,我很是興奮,開心了一成天。
對於大多數人來講,刷題的目的是找工做,那最終就要參加面試。一我的作題的過程是缺少交流的,實際面試中會有交流互動。所以,推薦在面試前參加一下模擬面試。
另外,哪怕不參加模擬面試,給別人講一下作題的思路和代碼的實現過程也是大有裨益的。
須要參加模擬面試的也能夠進「每日一題交流羣」,我邀請了力扣全站排名第一的 storm 來作模擬面試官。
3、最後上文總結了我想到的「LeetCode應該怎麼刷?」的方法,最重要的仍是堅持二字。作時間的朋友,努力付出就必定有收穫。若是以爲刷題困難,就多多學習,多多交流,不要半途而廢。
最後,但願你們都可以經過刷 LeetCode 得到成長,拿到本身滿意的 Offer。
期待你的點贊、關注、分享。
歡迎加入刷題羣目前已經近 2000 人加入了每日一題打卡羣。加入方式是經過每日一題打卡網站,該網站天天都會同步力扣每日一題,這是個互相幫助、互相監督的算法題打卡網站,其地址是 https://www.ojeveryday.com/。
想加入千人刷題羣的朋友,能夠打開上面的連接地址,而後在左側點擊「加入組織」,提交力扣我的主頁,便可進入刷題羣。期待你早日加入。
關於做者我是本文的做者是負雪明燭,畢業於北京郵電大學,目前就任於阿里巴巴。堅持刷算法題 5 年,共計刷了 800 多道算法題。作過的每一個算法題都在 CSDN 上寫題解博客,得到好評無數,CSDN 的累計閱讀量已經 161萬 次!
2021 年 2 月 13 日 負雪明燭 更新於 北京。