《Python程序員面試寶典》是一本介紹Python程序員面試的圖書寶典。這里,不僅介紹了程序員算法面試中的*公式,而且通過具體的實例從多角度剖析各類算法面試題,為讀者建立了一個完整的算法面試的方案數(shù)據(jù)庫,讓讀者快速理解全書內(nèi)容、做到胸有成竹應對面試的同時,也為未來的職業(yè)發(fā)展鋪平道路。
《Python程序員面試寶典》共分12章,其中前兩章首先引入一道亞馬遜面試題,并進行情景分析和解題思路,然后從技術(shù)面試的方法論和心態(tài)建設入手,介紹應對面試的基本方法和思路。后10章分別從基礎數(shù)據(jù)類型、數(shù)組和字符串、鏈表、堆棧、二叉樹、堆、二分查找法、圖論、貪婪算法和動態(tài)規(guī)劃等多個方面去詳解各類面試題,分析算法面試中*常見的各類技術(shù)問題。通過本書的學習,希望讀者能夠在大腦中建立起自己的解決方案數(shù)據(jù)庫,面試時可以迅速地搜索出相應的解決方案,從而提高解題效率和增加通過面試的幾率。
《Python程序員面試寶典》書中所有代碼都采用python語言開發(fā)。其語法結(jié)構(gòu)簡單,易于掌握,非常適合于高校計算機相關專業(yè)畢業(yè)生求職面試前的筆試參考用書,也可以作為計算機相關專業(yè)學生學習數(shù)據(jù)結(jié)構(gòu)和算法的輔助教材,所有致力于程序員職業(yè)的讀者均可選擇本書學習。
精選Facebook、Google、Microsoft、Amazon和BAT等大型企業(yè)的Python算法面試題,并進行詳細的剖析、分類歸納,提煉出算法面試的各種應對技巧,是一本Python程序員算法面試的圖書寶典。
全面介紹Python程序員面試筆試技巧和方法,教你如何以不變應萬變。
全面:兩萬多行代碼,100多個知識點,全面覆蓋Python程序員各類面試題型。
權(quán)威:15年開發(fā)經(jīng)驗、實戰(zhàn)技巧總結(jié),站在巨人的肩膀上,讓學習走捷徑。
深入:采用抽絲剝繭式分析,深入解釋計算機科學的底層邏輯算法及原理。
實戰(zhàn):包括60多個算法題目,針對性強,拿來就用。通過實戰(zhàn)學習解題思路。
第1章技術(shù)面試的方法論1
1.1 一道亞馬遜面試題的情景分析1
1.1.1 暴力枚舉法2
1.1.2 分而治之法4
1.1.3 最優(yōu)解法6
1.1.4 解題流程總結(jié)7
1.2 面試的流程,心態(tài)建設,相關準備8
1.2.1 面試前流程8
1.2.2 簡歷的制作10
1.2.3 有效的面試策略11
1.2.4 編碼實現(xiàn)12
1.2.5 面試過程中的交流要點13
1.3 知己知彼,百戰(zhàn)不殆從面試官角度看面試14
1.3.1 如何進行一場良好的面試15
1.3.2 面試官如何主導面試流程17
1.3.3 面試官如何評估候選人17
第2章算法面試的技術(shù)路線圖19
2.1 算法面試中的數(shù)據(jù)結(jié)構(gòu)19
2.1.1 基礎數(shù)據(jù)類型20
2.1.2 數(shù)組與字符串21
2.1.3 鏈表21
2.1.4 堆棧22
2.1.5 二叉樹22
2.1.6 堆23
2.1.7 哈希表23
2.2 算法的設計模式24
2.2.1 排序24
2.2.2 遞歸26
2.2.3 分而治之27
2.2.4 動態(tài)規(guī)劃29
2.2.5 貪婪算法29
2.2.6 逐步改進29
2.2.7 排除法30
2.3 抽象分析模式30
2.3.1 樣例覆蓋31
2.3.2 小量數(shù)據(jù)推導31
2.3.3 簡單方案的逐步改進32
2.3.4 問題還原33
2.3.5 圖論模擬34
第3章基礎數(shù)據(jù)類型的算法分析35
3.1 基礎數(shù)據(jù)類型中二進制位的操作算法35
3.1.1 整型變量值互換35
3.1.2 常用的二進制位操作36
3.1.3 解析一道二進制操作相關算法面試題37
3.1.4 總結(jié)40
3.2 用二進制操作求解集合所有子集40
3.2.1 題目描述40
3.2.2 算法描述40
3.2.3 代碼實現(xiàn)41
3.2.4 算法分析43
3.3 使用二進制求解最大公約數(shù)43
3.3.1 題目描述43
3.3.2 算法描述45
3.3.3 代碼實現(xiàn)47
3.3.4 算法分析49
3.4 素數(shù)判定50
3.4.1 題目描述50
3.4.2 算法描述50
3.4.3 代碼實現(xiàn)52
3.4.4 算法分析53
3.5 判斷矩形交集54
3.5.1 題目描述54
3.5.2 算法描述54
3.5.3 代碼實現(xiàn)56
3.6 數(shù)字與字符串相互轉(zhuǎn)化,簡單題目的隱藏陷阱58
3.6.1 題目描述58
3.6.2 算法描述58
3.6.3 代碼實現(xiàn)59
3.6.4 算法分析60
3.7 Elias Gamma編碼算法62
3.7.1 題目描述62
3.7.2 算法描述63
3.7.3 代碼實現(xiàn)63
3.7.4 算法分析66
3.8 整型的二進制乘法67
3.8.1 題目描述67
3.8.2 算法描述67
3.8.3 代碼實現(xiàn)69
3.8.4 算法分析73
第4章數(shù)組和字符串74
4.1 數(shù)組的定位排序74
4.1.1 題目描述74
4.1.2 算法描述75
4.1.3 代碼實現(xiàn)76
4.1.4 算法分析78
4.2 在整型數(shù)組中構(gòu)建元素之和能整除數(shù)組長度的子集78
4.2.1 題目描述78
4.2.2 算法描述78
4.2.3 代碼實現(xiàn)79
4.2.4 算法分析82
4.3 計算等價類82
4.3.1 題目描述82
4.3.2 算法描述83
4.3.3 代碼實現(xiàn)85
4.3.4 代碼分析86
4.4 大型整數(shù)相乘87
4.4.1 題目描述87
4.4.2 算法描述87
4.4.3 代碼實現(xiàn)88
4.4.4 代碼分析91
4.5 數(shù)組的序列變換92
4.5.1 題目描述92
4.5.2 算法描述92
4.5.3 代碼實現(xiàn)94
4.5.4 代碼分析96
4.6 字符串的旋轉(zhuǎn)96
4.6.1 題目描述96
4.6.2 算法描述96
4.6.3 代碼實現(xiàn)97
4.6.4 代碼分析99
4.7 二維數(shù)組的啟發(fā)式搜索算法99
4.7.1 題目描述99
4.7.2 算法描述99
4.7.3 代碼實現(xiàn)100
4.7.4 代碼分析101
4.8 二維數(shù)組的旋轉(zhuǎn)遍歷102
4.8.1 題目描述102
4.8.2 算法描述102
4.8.3 代碼實現(xiàn)104
4.8.4 代碼分析105
4.9 矩陣的90旋轉(zhuǎn)105
4.9.1 題目描述106
4.9.2 算法描述106
4.9.3 代碼實現(xiàn)107
4.9.4 代碼分析109
4.10 游程編碼109
4.10.1 題目描述110
4.10.2 算法描述110
4.10.3 代碼實現(xiàn)110
4.10.4 代碼分析112
4.11 字符串中單詞的逆轉(zhuǎn)113
4.11.1 題目描述113
4.11.2 算法描述113
4.11.3 代碼實現(xiàn)114
4.11.4 代碼分析115
4.12 Rabin-Karp字符串匹配算法115
4.12.1 題目描述115
4.12.2 算法描述115
4.12.3 代碼實現(xiàn)118
4.12.4 代碼分析120
4.13 用有限狀態(tài)自動機匹配字符串120
4.13.1 題目描述120
4.13.2 算法描述121
4.13.3 代碼實現(xiàn)124
4.13.4 代碼分析127
4.14 KMP算法字符串匹配算法的創(chuàng)意巔峰127
4.14.1 題目描述127
4.14.2 算法描述127
4.14.3 代碼實現(xiàn)129
4.14.4 代碼分析131
4.15 正則表達式引擎的設計和實施132
4.15.1 題目描述132
4.15.2 算法描述133
4.15.3 代碼實現(xiàn)138
4.15.4 代碼分析178
第5章隊列和鏈表179
5.1 遞歸式實現(xiàn)鏈表快速倒轉(zhuǎn)179
5.1.1 題目描述179
5.1.2 算法描述180
5.1.3 代碼實現(xiàn)181
5.1.4 代碼分析184
5.2 鏈表成環(huán)檢測184
5.2.1 題目描述185
5.2.2 算法描述185
5.2.3 代碼實現(xiàn)186
5.2.4 代碼分析189
5.3 在O(1)時間內(nèi)刪除單鏈表非末尾節(jié)點190
5.3.1 題目描述190
5.3.2 算法描述190
5.3.3 代碼實現(xiàn)191
5.3.4 代碼分析192
5.4 獲取重合列表的第一個相交節(jié)點192
5.4.1 題目描述193
5.4.2 算法描述193
5.4.3 代碼實現(xiàn)194
5.4.4 代碼分析196
5.5 單向鏈表的奇偶排序196
5.5.1 題目描述196
5.5.2 算法描述196
5.5.3 代碼實現(xiàn)198
5.5.4 代碼分析199
5.6 雙指針單向鏈表的自我復制199
5.6.1 題目描述200
5.6.2 算法描述200
5.6.3 代碼實現(xiàn)202
5.6.4 代碼分析206
5.7 利用鏈表層級打印二叉樹206
5.7.1 題目描述206
5.7.2 算法描述206
5.7.3 代碼實現(xiàn)207
5.7.4 代碼分析209
第6章堆棧和隊列210
6.1 利用堆棧計算逆向波蘭表達式210
6.1.1 題目描述210
6.1.2 算法描述210
6.1.3 代碼實現(xiàn)211
6.1.4 代碼分析213
6.2 計算堆棧當前元素最大值213
6.2.1 題目描述213
6.2.2 算法描述213
6.2.3 代碼實現(xiàn)214
6.2.4 代碼分析216
6.3 使用堆棧判斷括號匹配216
6.3.1 題目描述216
6.3.2 算法描述216
6.3.3 代碼實現(xiàn)217
6.3.4 代碼分析218
6.4 使用堆棧解決漢諾塔問題218
6.4.1 題目描述218
6.4.2 算法描述219
6.4.3 代碼實現(xiàn)219
6.4.4 代碼分析222
6.5 堆棧元素的在線排序222
6.5.1 題目描述223
6.5.2 算法描述223
6.5.3 代碼實現(xiàn)224
6.5.4 代碼分析225
6.6 計算滑動窗口內(nèi)的最大網(wǎng)絡流量225
6.6.1 題目描述226
6.6.2 算法描述226
6.6.3 代碼實現(xiàn)231
6.6.4 代碼分析234
6.7 使用堆棧模擬隊列234
6.7.1 題目描述235
6.7.2 算法描述235
6.7.3 代碼實現(xiàn)235
6.7.4 代碼分析236
第7章二叉樹238
7.1 二叉樹的平衡性檢測238
7.1.1 題目描述239
7.1.2 算法描述239
7.1.3 代碼實現(xiàn)239
7.1.4 代碼分析242
7.2 鏡像二叉樹的檢測242
7.2.1 題目描述243
7.2.2 算法描述243
7.2.3 代碼實現(xiàn)244
7.2.4 代碼分析246
7.3 二叉樹的Morris遍歷法247
7.3.1 題目描述247
7.3.2 算法描述247
7.3.3 代碼實現(xiàn)250
7.3.4 代碼分析251
7.4 使用前序遍歷和中序遍歷重構(gòu)二叉樹252
7.4.1 題目描述252
7.4.2 算法描述253
7.4.3 代碼實現(xiàn)254
7.4.4 代碼分析256
7.5 逆時針打印二叉樹外圍邊緣256
7.5.1 題目描述256
7.5.2 算法描述257
7.5.3 代碼實現(xiàn)257
7.5.4 代碼分析259
7.6 尋找兩個二叉樹節(jié)點的最近共同祖先259
7.6.1 題目描述260
7.6.2 算法描述260
7.6.3 代碼實現(xiàn)260
7.6.4 代碼分析264
7.7 設計搜索輸入框的輸入提示功能264
7.7.1 題目描述264
7.7.2 算法描述264
7.7.3 代碼實現(xiàn)265
7.7.4 代碼分析269
第8章堆270
8.1 使用堆排序?qū)崿F(xiàn)系統(tǒng)Timer機制270
8.1.1 題目描述270
8.1.2 算法描述270
8.1.3 代碼實現(xiàn)273
8.1.4 代碼分析279
8.2 波浪形數(shù)組的快速排序法279
8.2.1 題目描述279
8.2.2 算法描述280
8.2.3 代碼實現(xiàn)281
8.2.4 代碼分析287
8.3 快速獲取數(shù)組中點的相鄰區(qū)域點287
8.3.1 題目描述287
8.3.2 算法描述287
8.3.3 代碼實現(xiàn)289
8.3.4 代碼分析292
第9章二分查找法293
9.1 隱藏在《編程珠璣》中20年的bug293
9.1.1 題目描述294
9.1.2 算法描述294
9.1.3 代碼實現(xiàn)295
9.1.4 代碼分析297
9.2 在lg(k)時間內(nèi)查找兩個排序數(shù)組合并后第k小元素297
9.2.1 題目描述297
9.2.2 算法描述297
9.2.3 代碼實現(xiàn)299
9.2.4 代碼分析301
9.3 二分查找法尋求數(shù)組截斷點302
9.3.1 題目描述302
9.3.2 算法描述302
9.3.3 代碼實現(xiàn)304
9.3.4 代碼分析306
9.4 在雙升序數(shù)組中快速查找給定值306
9.4.1 題目描述307
9.4.2 算法描述307
9.4.3 代碼實現(xiàn)307
9.4.4 代碼分析309
第10章圖論310
10.1 地圖著色問題310
10.1.1 問題描述310
10.1.2 算法描述310
10.1.3 代碼實現(xiàn)311
10.1.4 代碼分析315
10.2 迪杰斯特拉最短路徑算法316
10.2.1 題目描述316
10.2.2 算法描述316
10.2.3 代碼實現(xiàn)319
10.2.4 代碼分析326
10.3 使用深度優(yōu)先搜索解決容器倒水問題327
10.3.1 問題描述327
10.3.2 算法描述327
10.3.3 代碼實現(xiàn)329
10.3.4 代碼分析333
第11章貪婪算法335
11.1 最小生成樹335
11.1.1 題目描述335
11.1.2 算法描述336
11.1.3 代碼實現(xiàn)339
11.1.4 代碼分析344
11.2 霍夫曼編碼344
11.2.1 題目描述345
11.2.2 算法描述345
11.2.3 代碼實現(xiàn)347
11.2.4 代碼分析349
11.3 離散點集的最大覆蓋率問題350
11.3.1 題目描述350
11.3.2 算法描述351
11.3.3 代碼實現(xiàn)352
11.3.4 代碼分析355
第12章動態(tài)規(guī)劃356
12.1 鋼管最優(yōu)切割方案356
12.1.1 問題描述357
12.1.2 算法描述357
12.1.3 代碼實現(xiàn)358
12.1.4 代碼分析360
12.2 查找最大共同子串361
12.2.1 問題描述362
12.2.2 算法描述362
12.2.3 代碼實現(xiàn)364
12.2.4 代碼分析366
12.3 將最大共同子串算法的空間復雜度從O(n2)改進為O(n)366
12.3.1 問題描述367
12.3.2 算法描述367
12.3.3 代碼實現(xiàn)368
12.3.4 代碼分析371