LABULADONG的算法筆記 版權信息
- ISBN:9787121457821
- 條形碼:9787121457821 ; 978-7-121-45782-1
- 裝幀:平塑勒單襯
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
LABULADONG的算法筆記 本書特色
這不是一本數據結構和算法的入門書,而是一本刷算法題的參考書。
本書的目的是手把手帶你刷題,每看完一節內容,都可以去刷幾道題,知其然,也知其所以然,即學即用,相信本書會讓你一讀就停不下來。
作為技術人,不管你是想進知名互聯網公司,還是想以后在技術的道路上走得遠,算法都是必經之路,它決定著技術人發展的上限,所以對于技術人來說,學好算法是非常非常非常必要的,那么,有這個意識之后,這本書,就是你需要的。
——張奇,微信公眾號“stormzhang“博主
在國內外各大IT公司的面試流程中,考察候選人算法能力是極其重要的一環。刷算法題既可以提高我們的面試優勢,也充分鍛煉了我們的邏輯思維能力。labuladong的這本算法小抄,用生動的語言為我們講解了許多經典的算法題目,對想要提升算法能力的小伙伴很有幫助。
——魏夢舒(@程序員小灰),暢銷書《漫畫算法》作者,微信公眾號“程序員小灰”博主
LABULADONG的算法筆記 內容簡介
本書專攻算法刷題,訓練算法思維,應對算法筆試,注重用套路和框架思維解決問題,以不變應萬變。第1章列舉了幾個*常見的算法類型及對應的解題框架思路,包括雙指針、滑動窗口等算法技巧,并把動態規劃、回溯算法、廣度優先搜索等技巧的核心抽象為二叉樹的兩種問題形式。第2章介紹了基礎數據結構相關的算法,包括數組鏈表的常見技巧匯總和數據結構設計的經典例題。第3章從二叉樹的幾種解題思路開始,嘗試從二叉樹的視角理解快速排序和歸并排序,進一步講解回溯、DFS、BFS等暴力搜索算法。第4章具體介紹了動態規劃相關的技巧,例如如何確定base case,如何寫狀態轉移方程,如何進行狀態壓縮等技巧,并用動態規劃的通用思路框架解決了十幾道經典的動態規劃問題。第5章講解了一些高頻面試/筆試題目,每道題目可能會結合之前章節講過的多種算法思路,也可能有多種解法。讀完這一章,你就可以獨自遨游題海啦!
LABULADONG的算法筆記 目錄
本書約定 / 1
編程語言基礎 / 4
第1章 核心框架篇 / 15
1.1 學習數據結構和算法的框架思維 15
1.1.1 數據結構的存儲方式 16
1.1.2 數據結構的基本操作 17
1.1.3 算法刷題指南 18
1.2 計算機算法的本質 24
1.2.1 算法的本質 24
1.2.2 數組/ 單鏈表系列算法 26
1.2.3 二叉樹系列算法 28
1.2.4 *后總結 33
1.3 動態規劃解題套路框架 33
1.3.1 斐波那契數列 35
1.3.2 湊零錢問題 40
1.3.3 *后總結 45
1.4 回溯算法解題套路框架 46
1.4.1 全排列問題 47
1.4.2 N皇后問題 52
1.4.3 *后總結 55
1.5 BFS算法解題套路框架 55
1.5.1 算法框架 56
1.5.2 二叉樹的*小高度 57
1.5.3 解開密碼鎖的*少次數 59
1.5.4 雙向BFS 優化 62
1.6 手把手帶你刷二叉樹(綱領) 65
1.6.1 二叉樹的重要性 66
1.6.2 深入理解前、中、后序 67
1.6.3 兩種解題思路 71
1.6.4 后序位置的特殊之處 75
1.6.5 層序遍歷 79
1.7 我寫了首詩,保你閉著眼睛都能寫出二分搜索算法 81
1.7.1 二分搜索框架 82
1.7.2 尋找一個數(基本的二分搜索) 82
1.7.3 尋找左側邊界的二分搜索 84
1.7.4 尋找右側邊界的二分搜索 88
1.7.5 邏輯統一 90
1.8 我寫了一個模板,把滑動窗口算法變成了默寫題 93
1.8.1 *小覆蓋子串 96
1.8.2 字符串排列 100
1.8.3 找所有字母異位詞 102
1.8.4 *長無重復子串 103
第2章 手把手刷數據結構 / 105
2.1 數組、鏈表 105
2.1.1 單鏈表的六大解題套路 105
2.1.2 數組雙指針的解題套路 116
2.1.3 小而美的算法技巧:前綴和數組 124
2.1.4 小而美的算法技巧:差分數組 128
2.2 數據結構設計 134
2.2.1 算法就像搭樂高:帶你手寫LRU算法 135
2.2.2 算法就像搭樂高:帶你手寫LFU算法 144
2.2.3 以O(1) 時間復雜度刪除/ 查找數組中的任意元素 151
2.2.4 單調棧結構解決三道算法題 159
2.2.5 單調隊列結構解決滑動窗口問題 164
第3章 手把手培養算法思維 / 170
3.1 二叉樹 170
3.1.1 手把手帶你刷二叉樹(思路) 170
3.1.2 手把手帶你刷二叉樹(構造) 179
3.1.3 手把手帶你刷二叉樹(序列化) 192
3.1.3 零、前/ 中/ 后序和二叉樹的唯一性 193
3.1.4 歸并排序詳解及運用 206
3.2 二叉搜索樹 215
3.2.1 手把手帶你刷二叉搜索樹(特性應用) 215
3.2.2 手把手帶你刷二叉搜索樹(增刪查改) 220
3.2.3 快速排序詳解及運用 227
3.3 圖論算法 237
3.3.1 圖論算法基礎 237
3.3.2 Union-Find算法詳解 245
3.3.3 *小生成樹之 Kruskal算法 259
3.4 暴力搜索算法 268
3.4.1 回溯算法解決子集、排列、組合問題 268
3.4.2 經典回溯算法:集合劃分問題 291
3.4.3 DFS算法搞定島嶼系列題目 305
3.4.4 BFS算法解決智力游戲 317
第4章 手把手刷動態規劃 / 323
4.1 動態規劃核心原理 323
4.1.1 base case 和備忘錄的初始值怎么定 323
4.1.2 *優子結構和dp 數組的遍歷方向怎么定 329
4.1.3 算法時空復雜度分析實用指南 338
4.1.4 動態規劃的降維打擊:空間壓縮技巧 351
4.2 子序列類型問題 358
4.2.1 動態規劃設計:*長遞增子序列 358
4.2.2 詳解*大子數組和 367
4.2.3 詳解編輯距離問題 372
4.2.4 詳解*長公共子序列問題 381
4.2.5 詳解正則匹配問題 389
4.2.6 子序列問題解題模板 397
4.3 背包問題 404
4.3.1 0-1 背包問題解題框架 404
4.3.2 背包問題變體之子集分割 407
4.3.3 背包問題之零錢兌換 410
4.4 用動態規劃玩游戲 414
4.4.1 *小路徑和問題 414
4.4.2 動態規劃算法通關《魔塔》 419
4.4.3 高樓扔雞蛋問題 426
4.4.4 戳氣球問題 438
第5章 高頻面試系列 / 445
5.1 鏈表操作的遞歸思維一覽 445
5.1.1 遞歸反轉整個鏈表 446
5.1.2 反轉鏈表前N 個節點 448
5.1.3 反轉鏈表的一部分 449
5.2 田忌賽馬背后的算法決策 450
5.3 一道數組去重的算法題把我整蒙了 454
5.4 帶權重的隨機選擇算法 458
5.4.1 解法思路 459
5.4.2 解法代碼 460
5.5 二分搜索題型套路分析 462
5.5.1 原始的二分搜索代碼 463
5.5.2 二分搜索問題的泛化 465
5.5.3 運用二分搜索的套路框架 467
5.5.4 例題一:珂珂吃香蕉 468
5.5.5 例題二:運送貨物 471
5.5.6 例題三:分割數組 474
5.6 如何高效解決接雨水問題 475
5.6.1 核心思路 476
5.6.2 備忘錄優化 478
5.6.3 雙指針解法 479
5.6.4 擴展延伸 481
5.7 一個函數解決nSum 問題 483
5.7.1 twoSum 問題 483
5.7.2 3Sum 問題 486
5.7.3 4Sum 問題 488
5.7.4 100Sum 問題 489
5.8 一個方法解決*近公共祖先問題 491
5.8.1 尋找一個元素 492
5.8.2 解決五道題目 495
展開全部
LABULADONG的算法筆記 作者簡介
付東來(@labuladong為其網名),微信公眾號labuladong的作者,有多年的刷題經驗,希望用通俗的語言幫助廣大互聯網從業者少走彎路,快速從根本上攻克算法難關,為職業道路的發展賦能。