★LeetCode刷題最重要題目精解
★資料結構程式語言紮實基礎
★演算法完整實作
★陣列、鏈結串列、樹、搜尋、佇列、圖演算法
★LRU、LFU快取
★費氏數列、N皇后問題、背包問題
★Union-Find
★Kruskal演算法
本書專攻演算法刷題,訓練演算法思維,應對演算法筆試,注重用策略和框架思維解決問題,以不變應萬變。
第1章列舉了幾個最常見的演算法類型及對應的解題框架思路,包括雙指標、滑動視窗等演算法技巧,並把動態規劃、回溯演算法、廣度優先搜索等技巧的核心抽象為二元樹的兩種問題形式。第2章介紹了基礎資料結構相關的演算法,包括陣列鏈結串列的常見技巧整理和資料結構設計的經典例題。第3章從二元樹的幾種解題思路開始,嘗試從二元樹的角度理解快速排序和歸併排序,進一步講解回溯、DFS、BFS等暴力搜索演算法。第4章具體介紹了動態規劃相關的技巧,例如如何確定base case,如何寫狀態轉移方程式,如何進行狀態壓縮等技巧,並用動態規劃的通用思路框架解決了十幾道經典的動態規劃問題。第5章講解了一些高頻面試/筆試題目,每道題目可能會結合之前章節講過的多種演算法思路,也可能有多種解法。
作者簡介:
付東來
微信公眾號「labuladong」的作者,有多年的刷題經驗,希望用通俗易懂的語言幫助廣大網路從業者少走彎路,快速從根本上克服算法難關,為職業道路的發展賦能。
作者序
前言
資料結構和演算法在電腦知識系統中有著舉足輕重的作用,這塊知識也有非常經典的教材供我們學習。但是,我們刷的演算法題往往會在經典的演算法思想之上套層皮,所以很容易讓人產生這種感覺:我以前的資料結構和演算法學得挺好的,為什麼這些演算法題我完全沒想法呢?
面對這種疑惑,可能就會有人擺出好幾本演算法相關的大部頭,建議你去進修。
有些書確實很經典,但我覺得我們應該搞清楚自己的目的是什麼。如果你是學生,對演算法有濃厚的興趣,甚至說以後準備搞這方面的研究,那我覺得你可以去啃一啃大部頭;但事實是,大部分人學習演算法是為了應對考試,這種情況去啃大部頭的C/P值就比較低了,更高效的方法是直接刷題。
但是,刷題也是有技巧的,刷題平臺動輒幾千道題,難道你全刷完嗎?最高效的刷題方式是邊刷邊歸納總結,抽象出每種題型的策略框架,以不變應萬變。我個人還是挺喜歡刷題的,經過長時間的累積總結,沉澱出了這本書,希望能給你帶來想法上的啟發和指導。
解演算法題的核心只有一個,那就是窮舉。不同的演算法,無非就是聰明的窮舉和笨一點的窮舉而已,真的沒什麼高深莫測的,讀完本書,你就會有深刻的體會。
前言
資料結構和演算法在電腦知識系統中有著舉足輕重的作用,這塊知識也有非常經典的教材供我們學習。但是,我們刷的演算法題往往會在經典的演算法思想之上套層皮,所以很容易讓人產生這種感覺:我以前的資料結構和演算法學得挺好的,為什麼這些演算法題我完全沒想法呢?
面對這種疑惑,可能就會有人擺出好幾本演算法相關的大部頭,建議你去進修。
有些書確實很經典,但我覺得我們應該搞清楚自己的目的是什麼。如果你是學生,對演算法有濃厚的興趣,甚至說以後準備搞這方面的研究,那我覺得你可以去啃一啃大部頭;但事實是,大部分人...
目錄
第 1 章 核心框架篇
1.1 學習資料結構和演算法的框架思維
1.2 電腦演算法的本質
1.3 動態規劃解題策略框架
1.4 回溯演算法解題策略框架
1.5 BFS 演算法解題策略框架
1.6 一步步帶你刷二元樹(綱領)
1.7 我寫了首詩,保你閉著眼睛都能寫出二分搜尋演算法
1.8 我寫了一個範本,把滑動視窗演算法變成了默寫題
第 2 章 一步步刷資料結構
2.1 陣列、鏈結串列
2.2 資料結構設計
第 3 章 一步步培養演算法思維
3.1 二元樹
3.2 二元搜尋樹
3.3 圖論演算法
3.4 暴力搜尋演算法
第 4 章 一步步刷動態規劃
4.1 動態規劃核心原理
4.2 子序列類型問題
4.3 背包問題
4.4 用動態規劃玩遊戲
第 5 章 高頻面試系列
5.1 鏈結串列操作的遞迴思維一覽
5.2 田忌賽馬背後的演算法決策
5.3 一道陣列去重的演算法題把我整傻了
5.4 帶權重的隨機選擇演算法
5.5 二分搜尋題型策略分析
5.6 如何高效解決接雨水問題
5.7 一個函式解決 nSum 問題
5.8 一個方法解決最近公共祖先問題
第 1 章 核心框架篇
1.1 學習資料結構和演算法的框架思維
1.2 電腦演算法的本質
1.3 動態規劃解題策略框架
1.4 回溯演算法解題策略框架
1.5 BFS 演算法解題策略框架
1.6 一步步帶你刷二元樹(綱領)
1.7 我寫了首詩,保你閉著眼睛都能寫出二分搜尋演算法
1.8 我寫了一個範本,把滑動視窗演算法變成了默寫題
第 2 章 一步步刷資料結構
2.1 陣列、鏈結串列
2.2 資料結構設計
第 3 章 一步步培養演算法思維
3.1 二元樹
3.2 二元搜尋樹
3.3 圖論演算法
3.4 暴力搜尋演算法
第 4 章 一步步刷動態規劃
4.1 動態規劃核心...