《算法大爆炸:面試通關步步為營》旨在説明讀者築牢資料結構和算法的基礎,提升職場競爭力。本書代碼採用Java語言編寫,分為上、下兩篇,共15章。其中,第1~9章為上篇,講解資料結構和算法基礎,為讀者全面梳理基本知識,內容涵蓋線性結構、樹結構、圖結構、排序與查找、窮舉法、遞迴算法、貪心算法、動態規劃、回溯法;第10~15章為下篇,收集了50多道經典且有趣的大廠面試真題,針對每道題都給出了詳細的分析和解答,幫助讀者全面提升解決實際問題的能力,同時為讀者準備筆試、面試提供幫助。
《算法大爆炸:面試通關步步為營》堅持“夯實基礎、注重實踐、舉一反三”的理念,內容豐富翔實、妙趣橫生,講解深入淺出、清晰到位。希望能夠陪伴讀者在輕鬆愉快的氛圍中學習。
楊峰
資深高級工程師。多年來致力於算法與數學方法的研究,發表了大量有趣而經典的算法文章,擅長用生動的語言闡述算法的本質問題。著有暢銷書《C語言完全手冊》《妙趣橫生的算法(C語言版)》《程式師面試筆記 C/C++、算法、資料結構篇》《Java程式師面試筆記》《那些令人腦洞大開的數學》。
上篇 數據結構與演算法基礎
第1章 線性結構 2
1.1 數組 2
1.1.1 數組的基本概念 2
1.1.2 數組的定義 3
1.1.3 數組的基本操作 5
1.1.4 數組的性能分析 11
1.1.5 案例分析 12
1.2 鏈表 19
1.2.1 鏈表的基本概念 19
1.2.2 鏈表的定義 20
1.2.3 鏈表的基本操作 21
1.2.4 鏈表的性能分析 27
1.2.5 不同形態的鏈表結構 28
1.2.6 案例分析 29
1.3 棧 38
1.3.1 棧的基本概念 38
1.3.2 棧的定義 38
1.3.3 棧的基本操作 40
1.3.4 案例分析 44
1.4 佇列 50
1.4.1 佇列的基本概念 50
1.4.2 佇列的定義 50
1.4.3 佇列的基本操作 52
1.4.4 雙端佇列 56
1.4.5 實戰分析 56
第2章 樹結構 64
2.1 樹的基本概念 64
2.2 二叉樹 65
2.3 二叉樹的遍歷 68
2.4 創建二叉樹 71
2.5 二叉排序樹與AVL樹 76
2.6 案例分析 81
第3章 圖結構 89
3.1 圖的基本概念 89
3.2 圖的存儲形式 92
3.3 鄰接表的實現 94
3.4 圖的遍歷 97
3.5 案例分析 103
第4章 排序與查找 109
4.1 直接插入排序 109
4.2 冒泡排序 112
4.3 簡單選擇排序 114
4.4 快速排序 117
4.5 希爾排序 120
4.6 堆排序 122
4.7 各種排序演算法的比較 129
4.8 折半查找演算法 130
4.9 案例分析 132
第5章 窮舉法 139
5.1 窮舉法的基本思想 139
5.2 案例分析 142
第6章 遞迴演算法 149
6.1 遞迴演算法的基本思想 149
6.2 案例分析 150
第7章 貪心演算法 159
7.1 貪心演算法的基本思想 159
7.2 案例分析 160
第8章 動態規劃 168
8.1 動態規劃演算法的基本思想 168
8.2 案例分析 173
第9章 回溯法 185
9.1 回溯法的基本思想 185
9.2 案例分析 188
下篇 大廠經典面試題詳解
第10章 數組和字串類面試題 200
10.1 數組元素的奇偶重排 200
10.2 不改變順序的數組元素奇偶重排 203
10.3 有序數組的兩數之和 206
10.4 三數之和 209
10.5 兩個有序數組的交集 214
11.6 最長公共首碼問題 219
10.7 最長公共子串問題 221
10.8 長度最小的連續子數組 224
10.9 最長無重複子串 232
10.10 刪除字元數組中特定字元 236
10.11 最短連續子數組問題 240
10.12 字元數組的內容重排 242
10.13 字串數組類面試題解題技巧 246
第11章 線性結構類面試題 249
11.1 約瑟夫環 249
11.2 單鏈表的逆置 253
11.3 判斷鏈表中是否存在迴圈結構 256
11.4 判斷兩個鏈表是否相交 260
11.5 判斷回文鏈表 265
11.6 最小棧問題 269
11.7 每日溫度 275
11.8 LRU緩存的設計 281
11.9 線性結構類面試題解題技巧 291
第12章 二叉樹類面試題 293
12.1 完全二叉樹的判定 293
12.2 二叉樹節點的最大距離 298
12.3 列印二叉樹中的重複子樹 302
12.4 還原二叉樹 307
12.5 二叉樹類面試題解題技巧 312
第13章 遞迴和動態規劃系列面試題 315
13.1 分解質因數 315
13.2 撥號盤字母組合 317
13.3 組合的總和 322
13.4 在大矩陣中找k 327
13.5 跳躍遊戲 332
13.6 機器人的最小路徑長度 336
13.7 聰明的偵探 342
第14章 窮舉法和回溯法系列面試題 347
14.1 數組元素之差的最小值 347
14.2 數的分組問題 350
14.3 最佳的碰面地點 354
14.4 多點共線問題 360
14.5 復原IP地址 369
14.6 矩陣中的相鄰數 372
14.7 被包圍的區域 377
第15章 其他類型演算法面試題 382
15.1 相差多少天 382
15.2 萬年曆 386
15.3 1的數量 389
15.4 找出人群中唯一的“單身者” 392
15.5 找出人群中3個“單身者”中的任意一個 393
15.6 空瓶換汽水問題 397
15.7 漁夫捕魚問題 399
15.8 親密數 401
15.9 篩選出100以內的素數 403
15.10 尋找醜數 405
15.11 組成最小的數 410
15.12 數字翻譯器 413
15.13 計算π值 416