刷leetcode不知道從哪裡刷起?? 來看看,BAT工程師已經把刷題題目順序都排好了,每道題還帶詳細題解!

語言: CN / TW / HK

相信很多小夥伴刷題的時候面對力扣上近兩千道題目,感覺無從下手,我花費半年時間整理了Github專案:leetcode刷題攻略。 裡面有200道經典演算法題目刷題順序、配有60w字的詳細圖解,常用演算法模板總結,以及難點影片講解,按照list一道一道刷就可以了!star支援一波吧!

為什麼會有這篇刷題指南

很多剛開始刷題的同學都有一個困惑:面對leetcode上近兩千到題目,從何刷起。

其實我之前在知乎上回答過這個問題,回答內容大概是按照如下型別來刷陣列-> 連結串列-> 雜湊表->字串->棧與佇列->樹->回溯->貪心->動態規劃->圖論->高階資料結構,再從簡單刷起,做了幾個型別題目之後,再慢慢做中等題目、困難題目。

但我能設身處地的感受到:即使有這樣一個整體規劃,對於一位初學者甚至演算法老手尋找合適自己的題目也是很困難,時間成本很高,而且題目還不一定就是經典題目。

對於刷題,我們都是想用最短的時間把經典題目都做一篇,這樣效率才是最高的!

所以我整理了這篇leetcode刷題最強指南:一個超級詳細的刷題順序,每道題目都是我精心篩選,都是經典題目高頻面試題,大家只要按照這個順序刷就可以了,你沒看錯,就是題目順序都排好了,文章順序就是刷題順序!挨個刷就可以,不用自己再去題海里選題了!

而且每道題目我都寫了的詳細題解(圖文並茂,難點配有影片),力扣上我的題解都是排在對應題目的首頁,質量是有目共睹的。

那麼今天我把這個刷題順序整理出來,是為了幫助更多的學習演算法的同學少走彎路!

如果你在刷leetcode,強烈建議先按照本篇刷題順序來刷,刷完了你會發現對整個知識體系有一個質的飛躍,不用在題海茫然的尋找方向

如何使用該刷題指南

大家在看下面題目文章的時候,就會發現有很多錄友(程式碼隨想錄的朋友們)在文章下留言打卡,這份刷題順序和題解已經陪伴了上萬錄友了,同時也說明文章的質量是經過上萬人的考驗!

歡迎每一位學習演算法的小夥伴加入到這個學習陣營來!

如果你是演算法老手,這篇攻略也是複習的最佳資料,如果把每個系列對應的總結篇,快速過一遍,整個演算法知識體系以及各種解法就重現腦海了

在按照如下順序刷題的過程中,每一道題解一定要看對應文章下面的留言(留言目前只能在手機端檢視)。

如果你有疑問或者發現文章哪裡有不對的地方,都可以在留言區都能找到答案,還有很多錄友的總結非常贊,看完之後也很有收穫。

目前「程式碼隨想錄」刷題指南更新了:140篇文章,精講了101道經典演算法題目,每個系列開始都有對應的理論基礎講解,系列結束都有對應的總結篇,部分難點題目還搭配了20分鐘左右的影片講解

說了這麼多,那麼你現在準備好了麼,go go go!

資源下載

本資源由程式碼隨想錄原創出品:

(將陸續整理各個專題的PDF下載版本)

前序

陣列

  1. 必須掌握的陣列理論知識

  2. 陣列:每次遇到二分法,都是一看就會,一寫就廢

  3. 陣列:就移除個元素很難麼?

  4. 陣列:滑動視窗拯救了你

  5. 陣列:這個迴圈可以轉懵很多人!

  6. 陣列:總結篇

連結串列

  1. 關於連結串列,你該瞭解這些!

  2. 連結串列:聽說用虛擬頭節點會方便很多?

  3. 連結串列:一道題目考察了常見的五個操作!

  4. 連結串列:聽說過兩天反轉連結串列又寫不出來了?

  5. 連結串列:環找到了,那入口呢?

  6. 連結串列:總結篇!

雜湊表

  1. 關於雜湊表,你該瞭解這些!

  2. 雜湊表:可以拿陣列當雜湊表來用,但雜湊值不要太大

  3. 雜湊表:雜湊值太大了,還是得用set

  4. 雜湊表:用set來判斷快樂數

  5. 雜湊表:map等候多時了

  6. 雜湊表:其實需要雜湊的地方都能找到map的身影

  7. 雜湊表:這道題目我做過?

  8. 雜湊表:解決了兩數之和,那麼能解決三數之和麼?

  9. 雙指標法:一樣的道理,能解決四數之和

  10. 雜湊表:總結篇!(每逢總結必經典)

字串

  1. 字串:這道題目,使用庫函式一行程式碼搞定

  2. 字串:簡單的反轉還不夠!

  3. 字串:替換空格

  4. 字串:花式反轉還不夠!

  5. 字串:反轉個字串還有這個用處?

  6. 幫你把KMP演算法學個通透!(理論篇)B站影片

  7. 幫你把KMP演算法學個通透!(程式碼篇)B站影片

  8. 字串:都來看看KMP的看家本領!

  9. 字串:KMP演算法還能幹這個!

  10. 字串:字首表不右移,難道就寫不出KMP了?

  11. 字串:總結篇!

雙指標法

雙指標法基本都是應用在陣列,字串與連結串列的題目上

  1. 陣列:就移除個元素很難麼?

  2. 字串:這道題目,使用庫函式一行程式碼搞定

  3. 字串:替換空格

  4. 字串:花式反轉還不夠!

  5. 連結串列:聽說過兩天反轉連結串列又寫不出來了?

  6. 連結串列:環找到了,那入口呢?

  7. 雜湊表:解決了兩數之和,那麼能解決三數之和麼?

  8. 雙指標法:一樣的道理,能解決四數之和

  9. 雙指標法:總結篇!

棧與佇列

  1. 棧與佇列:來看看棧和佇列不為人知的一面

  2. 棧與佇列:我用棧來實現佇列怎麼樣?

  3. 棧與佇列:用佇列實現棧還有點彆扭

  4. 棧與佇列:系統中處處都是棧的應用

  5. 棧與佇列:匹配問題都是棧的強項

  6. 棧與佇列:有沒有想過計算機是如何處理表達式的?

  7. 棧與佇列:滑動窗口裡求最大值引出一個重要資料結構

  8. 棧與佇列:求前 K 個高頻元素和佇列有啥關係?

  9. 棧與佇列:總結篇!

二叉樹

題目分類大綱如下: 二叉樹大綱

  1. 關於二叉樹,你該瞭解這些!

  2. 二叉樹:一入遞迴深似海,從此offer是路人

  3. 二叉樹:聽說遞迴能做的,棧也能做!

  4. 二叉樹:前中後序迭代方式的寫法就不能統一一下麼?

  5. 二叉樹:層序遍歷登場!

  6. 二叉樹:你真的會翻轉二叉樹麼?

  7. 本週小結!(二叉樹)

  8. 二叉樹:我對稱麼?

  9. 二叉樹:看看這些樹的最大深度

  10. 二叉樹:看看這些樹的最小深度

  11. 二叉樹:我有多少個節點?

  12. 二叉樹:我平衡麼?

  13. 二叉樹:找我的所有路徑?

  14. 還在玩耍的你,該總結啦!(本週小結之二叉樹)

  15. 二叉樹:以為使用了遞迴,其實還隱藏著回溯

  16. 二叉樹:做了這麼多題目了,我的左葉子之和是多少?

  17. 二叉樹:我的左下角的值是多少?

  18. 二叉樹:遞迴函式究竟什麼時候需要返回值,什麼時候不要返回值?

  19. 二叉樹:構造二叉樹登場!

  20. 二叉樹:構造一棵最大的二叉樹

  21. 本週小結!(二叉樹系列三)

  22. 二叉樹:合併兩個二叉樹

  23. 二叉樹:二叉搜尋樹登場!

  24. 二叉樹:我是不是一棵二叉搜尋樹

  25. 二叉樹:搜尋樹的最小絕對差

  26. 二叉樹:我的眾數是多少?

  27. 二叉樹:公共祖先問題

  28. 本週小結!(二叉樹系列四)

  29. 二叉樹:搜尋樹的公共祖先問題

  30. 二叉樹:搜尋樹中的插入操作

  31. 二叉樹:搜尋樹中的刪除操作

  32. 二叉樹:修剪一棵搜尋樹

  33. 二叉樹:構造一棵搜尋樹

  34. 二叉樹:搜尋樹轉成累加樹

  35. 二叉樹:總結篇!(需要掌握的二叉樹技能都在這裡了)

回溯演算法

題目分類大綱如下:

回溯演算法大綱

  1. 關於回溯演算法,你該瞭解這些!

  2. 回溯演算法:求組合問題!

  3. 回溯演算法:組合問題再剪剪枝

  4. 回溯演算法:求組合總和!

  5. 回溯演算法:電話號碼的字母組合

  6. 本週小結!(回溯算法系列一)

  7. 回溯演算法:求組合總和(二)

  8. 回溯演算法:求組合總和(三)

  9. 回溯演算法:分割回文串

  10. 回溯演算法:復原IP地址

  11. 回溯演算法:求子集問題!

  12. 本週小結!(回溯算法系列二)

  13. 回溯演算法:求子集問題(二)

  14. 回溯演算法:遞增子序列

  15. 回溯演算法:排列問題!

  16. 回溯演算法:排列問題(二)

  17. 本週小結!(回溯算法系列三)

  18. 本週小結!(回溯算法系列三)續集

  19. 影片來了!!帶你學透回溯演算法(理論篇)

  20. 影片來了!!回溯演算法(力扣題目:77.組合)

  21. 影片來了!!回溯演算法剪枝操作(力扣題目:77.組合)

  22. 影片來了!!回溯演算法(力扣題目:39.組合總和)

  23. 回溯演算法:重新安排行程

  24. 回溯演算法:N皇后問題

  25. 回溯演算法:解數獨

  26. 一篇總結帶你徹底搞透回溯演算法!

貪心演算法

題目分類大綱如下:

貪心演算法大綱

  1. 關於貪心演算法,你該瞭解這些!

  2. 貪心演算法:分發餅乾

  3. 貪心演算法:擺動序列

  4. 貪心演算法:最大子序和

  5. 本週小結!(貪心算法系列一)

  6. 貪心演算法:買賣股票的最佳時機II

  7. 貪心演算法:跳躍遊戲

  8. 貪心演算法:跳躍遊戲II

  9. 貪心演算法:K次取反後最大化的陣列和

  10. 本週小結!(貪心算法系列二)

  11. 貪心演算法:加油站

  12. 貪心演算法:分發糖果

  13. 貪心演算法:檸檬水找零

  14. 貪心演算法:根據身高重建佇列

  15. 本週小結!(貪心算法系列三)

  16. 貪心演算法:根據身高重建佇列(續集)

  17. 貪心演算法:用最少數量的箭引爆氣球

  18. 貪心演算法:無重疊區間

  19. 貪心演算法:劃分字母區間

  20. 貪心演算法:合併區間

  21. 本週小結!(貪心算法系列四)

  22. 貪心演算法:單調遞增的數字

  23. 貪心演算法:買賣股票的最佳時機含手續費

  24. 貪心演算法:我要監控二叉樹!

  25. 貪心演算法:總結篇!(每逢總結必經典)

動態規劃

動態規劃專題已經開始啦,來不及解釋了,小夥伴們上車別掉隊!

  1. 關於動態規劃,你該瞭解這些!

  2. 動態規劃:斐波那契數

  3. 動態規劃:爬樓梯

  4. 動態規劃:使用最小花費爬樓梯

  5. 本週小結!(動態規劃系列一)

  6. 動態規劃:不同路徑

  7. 動態規劃:不同路徑還不夠,要有障礙!

  8. 動態規劃:整數拆分,你要怎麼拆?

  9. 動態規劃:不同的二叉搜尋樹

  10. 本週小結!(動態規劃系列二)

揹包問題系列:

揹包問題大綱

  1. 動態規劃:關於01揹包問題,你該瞭解這些!

  2. 動態規劃:關於01揹包問題,你該瞭解這些!(滾動陣列)

  3. 動態規劃:分割等和子集可以用01揹包!

  4. 動態規劃:最後一塊石頭的重量 II

  5. 本週小結!(動態規劃系列三)

  6. 動態規劃:目標和!

  7. 動態規劃:一和零!

  8. 動態規劃:關於完全揹包,你該瞭解這些!

  9. 動態規劃:給你一些零錢,你要怎麼湊?

  10. 本週小結!(動態規劃系列四)

  11. 動態規劃:Carl稱它為排列總和!

  12. 動態規劃:以前我沒得選,現在我選擇再爬一次!

  13. 動態規劃: 給我個機會,我再兌換一次零錢

  14. 動態規劃:一樣的套路,再求一次完全平方數

  15. 本週小結!(動態規劃系列五)

  16. 動態規劃:單詞拆分

  17. 動態規劃:關於多重揹包,你該瞭解這些!

  18. 聽說揹包問題很難? 這篇總結篇來拯救你了

打家劫舍系列:

  1. 動態規劃:開始打家劫舍!

  2. 動態規劃:繼續打家劫舍!

  3. 動態規劃:還要打家劫舍!

股票系列:

股票問題總結

  1. 動態規劃:買賣股票的最佳時機

  2. 動態規劃:本週我們都講了這些(系列六)

  3. 動態規劃:買賣股票的最佳時機II

  4. 動態規劃:買賣股票的最佳時機III

  5. 動態規劃:買賣股票的最佳時機IV

  6. 動態規劃:最佳買賣股票時機含冷凍期

  7. 動態規劃:本週我們都講了這些(系列七)

  8. 動態規劃:買賣股票的最佳時機含手續費

  9. 動態規劃:股票系列總結篇

子序列系列:

  1. 動態規劃:最長遞增子序列

  2. 動態規劃:最長連續遞增序列

  3. 動態規劃:最長重複子陣列

  4. 動態規劃:最長公共子序列

  5. 動態規劃:本週我們都講了這些(系列八)

  6. 動態規劃:不相交的線

  7. 動態規劃:最大子序和

  8. 動態規劃:判斷子序列

  9. 動態規劃:不同的子序列

  10. 動態規劃:兩個字串的刪除操作

  11. 動態規劃:本週我們都講了這些(系列十)

(持續更新中....)

圖論

貪心 -> 動態規劃 -> 圖論

總結

這裡我重點強調一下:經典題目不是刷一遍就完事的,要刷很多遍,因為大家在刷某個專題的時候,一定會忘一些之前的知識,例如刷到了貪心,可能回溯就已經有點想不起來了。

所以一定要多刷,加深記憶,然後面試之前一段時間就開始看各個專題的總結篇,進行快速回顧

目前在電腦端檢視文章,可以Github上:https://github.com/youngyangyang04/leetcode-master看。Github會定期更新,進度會較公眾號慢1 - 2天,歡迎順便給個star!

可以在B站上關注我的影片 B站上找我

另外我已經將「程式碼隨想錄」的演算法文章按照由淺入深的刷題順序編排起來,整理成冊,陸續整理出PDF版本了

先上圖:

pdf

趕緊去下載看看,你會發現相見恨晚! BAT程式設計師的演算法學習手冊開放下載!

如果感覺對你有幫助,要不吝嗇給個贊吧!