這是一本圖文并茂的力扣(LeetCode)題解書,旨在讓廣大讀者理解數(shù)據(jù)結(jié)構(gòu)和算法的必備知識,掌握解決各類經(jīng)典題目的基本技能,陪伴讀者攻克算法題目的難關(guān)。本書通過算法題解的形式講解了基本數(shù)據(jù)結(jié)構(gòu)和基礎(chǔ)數(shù)學知識,包括貪心、遞歸、回溯和動態(tài)規(guī)劃等算法思想,深度優(yōu)先和廣度優(yōu)先、雙指針、滑動窗口、位運算等解題技巧,以及通用解題“套路”和解題模板等內(nèi)容,引導讀者了解并掌握解決算法題目的方式、方法,旨在循序漸進地提高讀者應對算法題目的能力。
本書共有5位作者,他們和另外4名審閱者組建了一個小團隊,合作完成此書。團隊成員大都畢業(yè)于985、211院校計算機專業(yè),他們在解算法題、參加算法競賽和LeetCode周賽等過程中積攢的豐富經(jīng)驗都匯集于此書當中。本書的主要作者、牽頭人路志鵬(lucifer)是一位狂熱的算法愛好者,他樂于與大家分享算法知識,在GitHub上的題解倉庫(https://github.com/azl397985856/leetcode)幾年來積攢了超過4萬的Star,同時還創(chuàng)辦了知名的算法公眾號“力扣加加”。
第1章 預備知識 1
1.1 學習算法需要數(shù)學知識嗎 1
1.2 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法 2
1.3 復雜度分析 3
總結(jié) 12
第2章 數(shù)學之美 14
2.1 兩數(shù)之和 14
2.2 三數(shù)之和 18
2.3 四數(shù)之和 19
2.4 四數(shù)相加II 22
2.5 最接近的三數(shù)之和 24
2.6 最大子序列和 26
2.7 最大數(shù) 31
2.8 分數(shù)到小數(shù) 33
2.9 最大整除子集 35
2.10 質(zhì)數(shù)排列 37
總結(jié) 39
第3章 回文的藝術(shù) 41
3.1 驗證回文字符串Ⅱ 41
3.2 回文鏈表 44
3.3 回文數(shù) 47
3.4 最長回文子串 48
3.5 最長回文子序列 50
3.6 超級回文數(shù) 53
總結(jié) 56
第4章 游戲之樂 58
4.1 外觀數(shù)列(報數(shù)) 58
4.2 24點 61
4.3 數(shù)獨游戲 67
4.4 生命游戲 75
總結(jié) 78
第5章 深度優(yōu)先遍歷和廣度優(yōu)先遍歷 79
5.1 深度優(yōu)先遍歷 79
5.2 廣度優(yōu)先遍歷 81
5.3 路徑和系列問題 82
5.4 島嶼問題 91
總結(jié) 100
第6章 二分法 102
6.1 二分查找 102
6.2 尋找旋轉(zhuǎn)排序數(shù)組中的最小值 105
6.3 愛吃香蕉的珂珂 107
6.4 x的平方根 109
6.5 尋找峰值 112
6.6 分割數(shù)組的最大值 114
總結(jié) 118
第7章 位運算 119
7.1 位1的個數(shù) 120
7.2 實現(xiàn)加法 122
7.3 整數(shù)替換 124
7.4 只出現(xiàn)一次的數(shù)字 127
總結(jié) 133
第8章 設(shè)計 135
8.1 最小棧 135
8.2 實現(xiàn) Trie(前綴樹) 142
8.3 LRU 緩存機制 146
8.4 LFU 緩存 149
8.5 設(shè)計跳表 155
總結(jié) 163
第9章 雙指針 164
9.1 頭/尾指針 166
9.2 快慢指針 171
總結(jié) 182
第10章 動態(tài)規(guī)劃 183
10.1 爬樓梯 186
10.2 打家劫舍系列 188
10.3 不同路徑 195
10.4 零錢兌換 199
總結(jié) 204
第11章 滑動窗口 205
11.1 滑動窗口最大值 206
11.2 最小覆蓋子串 209
11.3 替換后的最長重復字符 213
11.4 字符串的排列 216
總結(jié) 219
第12章 博弈問題 220
12.1 石子游戲 220
12.2 預測贏家 225
12.3 Nim 游戲 230
12.4 猜數(shù)字大小II 233
總結(jié) 236
第13章 股票問題 237
13.1 買賣股票的最佳時機 237
13.2 買賣股票的最佳時機II 240
13.3 買賣股票的最佳時機(含手續(xù)費) 242
13.4 買賣股票的最佳時機(含冷凍期) 247
13.5 買賣股票的最佳時機IV 249
總結(jié) 253
第14章 分治法 254
14.1 合并k個排序鏈表 255
14.2 數(shù)組中的第k個最大元素 260
14.3 搜索二維矩陣 II 265
總結(jié) 274
第15章 貪心法 276
15.1 分發(fā)餅干 276
15.2 跳躍游戲 278
15.3 任務(wù)調(diào)度器 282
15.4 分發(fā)糖果 284
15.5 無重疊區(qū)間 287
總結(jié) 289
第16章 回溯法 290
16.1 組合總和 I 290
16.2 組合總和 II 296
16.3 子集 299
16.4 全排列 300
16.5 解數(shù)獨 301
總結(jié) 304
第17章 一些有趣的題目 306
17.1 求眾數(shù) II 306
17.2 柱狀圖中最大的矩形 309
17.3 一周中的第幾天 314
17.4 水壺問題 317
17.5 可憐的小豬 321
總結(jié) 325
第18章 一些通用解題模板 326
18.1 二分法 326
18.2 回溯法 329
18.3 并查集 330
18.4 BFS 333
18.5 滑動窗口 334
18.6 數(shù)學 336
總結(jié) 339
第19章 融會貫通 340
19.1 循環(huán)移位問題 340
19.2 編輯距離 349
19.3 第k問題 357
總結(jié) 369
第20章 解題技巧和面試技巧 370
20.1 看限制條件 371
20.2 預處理 380
20.3 不要忽視暴力法 388
20.4 降維與狀態(tài)壓縮 395
20.5 猜測tag 402
總結(jié) 403