程序員代碼面試指南:IT名企演算法與數據結構題目最優解(第2版) | 被動收入的投資秘訣 - 2024年9月
![](https://www.books.com.tw/img/CN1/161/23/CN11612391.jpg)
程序員代碼面試指南:IT名企演算法與數據結構題目最優解(第2版)
《程序員代碼面試指南:IT名企演算法與數據結構題目最優解(第2版)》是一本程序員代碼面試"神書」!書中對IT名企代碼面試各類題目的最優解進行了總結,並提供了相關代碼實現。針對當前程序員面試缺乏權威題目匯總這一痛點,本書選取將近300道真實出現過的經典代碼面試題,幫助廣大程序員的面試準備做到接近萬無一失。"刷」完本書後,你就是"題王」!
《程序員代碼面試指南:IT名企演算法與數據結構題目最優解(第2版)》採用題目解答的方式組織內容,並把面試題類型相近或者解法相近的題目盡量放在一起,讀者在學習本書時很容易看出面試題解法之間的聯繫,使知識的學習避免碎片化。書中將所有的面試題從難到易依次分為"將」「校」「尉」「士」四個檔次,方便讀者有針對性地選擇"刷」題。本書所收錄的所有面試題都給出了最優解講解和代碼實現,並且提供了一些普通解法和最優解法的運行時間對比,讓讀者真切地感受到最優解的魅力!
《程序員代碼面試指南:IT名企演算法與數據結構題目最優解(第2版)》中的題目全面且經典,更重要的是,書中收錄了大量新題和最優解分析,這些內容源自筆者多年來"死磕自己」的深入思考。程序員們做好準備在IT名企的面試中脫穎而出、一舉成名了嗎?這本書就是你應該擁有的"神兵利器」。當然,對需要提升演算法和數據結構等方面能力的程序員而言,《程序員代碼面試指南:IT名企演算法與數據結構題目最優解(第2版)》的價值也是顯而易見的。
左程雲,本科和碩士先後就讀于華中科技大學和芝加哥大學,在多家國內外互聯網公司工作多年。自2010年起專注刷題至今,從2015年開始利用業餘時間在牛客網平臺針對代碼面試與演算法開始教學工作。
第1章 棧和佇列 1
設計一個有getMin功能的棧(士 ★☆☆☆) 1
由兩個棧組成的佇列(尉 ★★☆☆) 5
如何僅用遞迴函數和棧操作逆序一個棧(尉 ★★☆☆) 7
貓狗佇列(難度:士 ★☆☆☆) 9
用一個棧實現另一個棧的排序(士 ★☆☆☆) 12
用棧來求解漢諾塔問題(校 ★★★☆) 13
生成視窗最大值陣列(尉 ★★☆☆) 18
單調棧結構(尉 ★★☆☆) 20
求最大子矩陣的大小(校 ★★★☆) 26
最大值減去最小值小於或等於num的子陣列數量(校 ★★★☆) 31
可見的山峰對數量(原問題 士 ★☆☆☆ 進階問題 將 ★★★★) 33
第2章 鏈表問題 41
列印兩個有序鏈表的公共部分(士 ★☆☆☆) 41
在單鏈表和雙鏈表中刪除倒數第K個節點(士 ★☆☆☆) 42
刪除鏈表的中間節點和a/b處的節點(士 ★☆☆☆) 45
反轉單向和雙向鏈表(士 ★☆☆☆) 47
反轉部分單向鏈表(士 ★☆☆☆) 48
環形單鏈表的約瑟夫問題(原問題 士 ★☆☆☆ 進階 校 ★★★☆) 50
判斷一個鏈表是否為回文結構(普通解法 士 ★☆☆☆ 進階解法 尉 ★★☆☆) 55
將單向鏈表按某值劃分成左邊小、中間相等、右邊大的形式(尉 ★★☆☆) 59
複製含有隨機指針節點的鏈表(尉 ★★☆☆) 63
兩個單鏈表生成相加鏈表(士 ★☆☆☆) 66
兩個單鏈表相交的一系列問題(將 ★★★★) 69
將單鏈表的每K個節點之間逆序(尉 ★★☆☆) 74
刪除無序單鏈表中值重複出現的節點(士 ★☆☆☆) 77
在單鏈表中刪除指定值的節點(士 ★☆☆☆) 79
將搜索二叉樹轉換成雙向鏈表(尉 ★★☆☆) 81
單鏈表的選擇排序(士 ★☆☆☆) 84
一種怪異的節點刪除方式(士 ★☆☆☆) 86
向有序的環形單鏈表中插入新節點(士 ★☆☆☆) 87
合併兩個有序的單鏈表(士 ★☆☆☆) 88
按照左右半區的方式重新組合單鏈表(士 ★☆☆☆) 90
第3章 二叉樹問題 93
分別用遞迴和非遞迴方式實現二叉樹先序、中序和後序遍歷(校 ★★★☆) 93
列印二叉樹的邊界節點(尉 ★★☆☆) 100
如何較為直觀地列印二叉樹(尉 ★★☆☆) 104
二叉樹的序列化和反序列化(士 ★☆☆☆) 107
遍歷二叉樹的神級方法(將 ★★★★) 111
在二叉樹中找到累加和為指定值的最長路徑長度(尉 ★★☆☆) 119
找到二叉樹中的最大搜索二叉子樹(尉 ★★☆☆) 121
找到二叉樹中符合搜索二叉樹條件的最大拓撲結構(校 ★★★☆) 124
二叉樹的按層列印與ZigZag列印(尉 ★★☆☆) 132
調整搜索二叉樹中兩個錯誤的節點(原問題 尉 ★★☆☆ 進階問題 將 ★★★★) 137
判斷t1樹是否包含t2樹全部的拓撲結構(士 ★☆☆☆) 142
判斷t1樹中是否有與t2樹拓撲結構完全相同的子樹(校 ★★★☆) 144
判斷二叉樹是否為平衡二叉樹(士 ★☆☆☆) 146
根據後序數組重建搜索二叉樹(士 ★☆☆☆) 148
判斷一棵二叉樹是否為搜索二叉樹和完全二叉樹(士 ★☆☆☆) 150
通過有序數組生成平衡搜索二叉樹(士 ★☆☆☆) 152
在二叉樹中找到一個節點的後繼節點(尉 ★★☆☆) 153
在二叉樹中找到兩個節點的最近公共祖先(原問題 士 ★☆☆☆ 進階問題 尉 ★★☆☆ 再進階問題:校 ★★★☆) 155
Tarjan演算法與並查集解決二叉樹節點間最近公共祖先的批量查詢問題(校 ★★★☆) 160
二叉樹節點間的最大距離問題(尉 ★★☆☆) 168
派對的最大快樂值(尉 ★★☆☆) 169
通過先序和中序數組生成後序數組(士 ★☆☆☆) 172
統計和生成所有不同的二叉樹(尉 ★★☆☆) 173
統計完全二叉樹的節點數(尉 ★★☆☆) 176
第4章 遞迴和動態規劃 179
斐波那契系列問題的遞迴和動態規劃(將 ★★★★) 179
矩陣的最小路徑和(尉 ★★☆☆) 185
換錢的最少貨幣數(尉 ★★☆☆) 189
機器人達到指定位置方法數(尉 ★★☆☆) 192
換錢的方法數(尉 ★★☆☆) 199
打氣球的最大分數(校 ★★★☆) 204
最長遞增子序列(校 ★★★☆) 210
信封嵌套問題(校 ★★★☆) 214
漢諾塔問題(校 ★★★☆) 217
最長公共子序列問題(尉 ★★☆☆) 220
最長公共子串問題(校 ★★★☆) 223
子陣列異或和為0的最多劃分(校 ★★★☆) 227
最小編輯代價(校 ★★★☆) 230
字串的交錯組成(校 ★★★☆) 233
龍與地下城遊戲問題(尉 ★★☆☆) 236
數位字串轉換為字母組合的種數(尉 ★★☆☆) 238
運算式得到期望結果的組成種數(校 ★★★☆) 240
排成一條線的紙牌博弈問題(尉 ★★☆☆) 245
跳躍遊戲(士 ★☆☆☆) 247
陣列中的最長連續序列(尉 ★★☆☆) 248
N皇后問題(校 ★★★☆) 249
第5章 字串問題 253
判斷兩個字串是否互為變形詞(士 ★☆☆☆) 253
判斷兩個字串是否互為旋轉詞(士 ★☆☆☆) 254
將整數字串轉成整數值(尉 ★★☆☆) 255
字串的統計字串(士 ★☆☆☆) 258
判斷字元陣列中是否所有的字元都只出現過一次
(按要求1實現的方法 士 ★☆☆☆ 按要求2實現的方法 尉 ★★☆☆) 261
在有序但含有空的陣列中查找字串(尉 ★★☆☆) 263
字串的調整與替換(士 ★☆☆☆) 265
翻轉字串(士 ★☆☆☆) 267
完美洗牌問題(將 ★★★★) 270
刪除多餘字元得到字典序最小的字串(尉 ★★☆☆) 276
陣列中兩個字串的最小距離(尉 ★★☆☆) 279
字串的轉換路徑問題(尉 ★★☆☆) 281
添加最少字元使字串整體都是回文字串(校 ★★★☆) 285
括弧字串的有效性和最長有效長度
(原問題 士 ★☆☆☆ 補充問題 尉 ★★☆☆) 290
公式字串求值(校 ★★★☆) 292
0左邊必有1的二進位字元串數量(校 ★★★☆) 294
拼接所有字串產生字典順序最小的大寫字串(校 ★★★☆) 297
找到字串的最長無重複字元子串(尉 ★★☆☆) 300
找到被指的新類型字元(士 ★☆☆☆) 302
旋變字串問題(將 ★★★★) 303
最小包含子串的長度(校 ★★★☆) 310
回文最少分割數(尉 ★★★☆) 314
字串匹配問題(校 ★★★☆) 316
字典樹(首碼樹)的實現(尉 ★★★☆) 320
子陣列的最大異或和(校 ★★★☆) 324
第6章 大資料和空間限制 330
認識布隆篩檢程式(尉 ★★☆☆) 330
只用2GB記憶體在20億個整數中找到出現次數最多的數(士 ★☆☆☆) 335
40億個非負整數中找到沒出現的數(尉 ★★☆☆) 336
找到100億個URL中重複的URL以及搜索詞彙的top K問題(士 ★☆☆☆) 337
40億個非負整數中找到出現兩次的數和所有數的中位數(尉 ★★☆☆) 338
一致性雜湊演算法的基本原理(尉 ★★☆☆) 339
島問題(原問題 尉 ★★☆☆ 進階問題 將 ★★★★) 342
第7章 位運算 348
不用額外變數交換兩個整數的值(士 ★☆☆☆) 348
不用做任何比較判斷找出兩個數中較大的數(校 ★★★☆) 349
只用位元運算不用算數運算實現整數的加減乘除運算(尉 ★★☆☆) 350
整數的二進位表達中有多少個1(尉 ★★☆☆) 355
在其他數都出現偶數次的陣列中找到出現奇數次的數(尉 ★★☆☆) 357
在其他數都出現k次的陣列中找到只出現一次的數(尉 ★★☆☆) 359
第8章 陣列和矩陣問題 361
轉圈列印矩陣(士 ★☆☆☆) 361
將正方形矩陣順時針轉動90°(士 ★☆☆☆) 363
“之”字形列印矩陣(士 ★☆☆☆) 364
找到無序數組中最小的k個數
(O(Nlogk)的方法 尉 ★★☆☆ O(N)的方法 將 ★★★★) 366
需要排序的最短子陣列長度(士 ★☆☆☆) 371
在陣列中找到出現次數大於N/K的數(校 ★★★☆) 372
在行列都排好序的矩陣中找數(士 ★☆☆☆) 376
最長的可整合子陣列的長度(尉 ★★☆☆) 378
不重複列印排序陣列中相加和為給定值的所有二元組和三元組
(尉 ★★☆☆) 380
未排序正數陣列中累加和為給定值的最長子陣列長度(尉 ★★☆☆) 382
未排序陣列中累加和為給定值的最長子陣列系列問題(尉 ★★☆☆) 384
未排序陣列中累加和小於或等於給定值的最長子陣列長度(將 ★★★★) 386
計算陣列的小和(校 ★★★☆) 392
自然數陣列的排序(士 ★☆☆☆) 394
奇數下標都是奇數或者偶數下標都是偶數(士 ★☆☆☆) 396
子陣列的最大累加和問題(士 ★☆☆☆) 397
子矩陣的最大累加和問題(尉 ★★☆☆) 398
在陣列中找到一個局部最小的位置(尉 ★★☆☆) 401
陣列中子陣列的最大累乘積(尉 ★★☆☆) 402
列印N個陣列整體最大的Top K(尉 ★★☆☆) 404
邊界都是1的最大正方形大小(尉 ★★☆☆) 406
不包含本位置值的累乘數組(士 ★☆☆☆) 409
陣列的partition調整(士 ★☆☆☆) 411
求最短通路值(尉 ★★☆☆) 413
陣列中未出現的最小正整數(尉 ★★☆☆) 415
陣列排序之後相鄰數的最大差值(尉 ★★☆☆) 416
做項目的最大收益問題(尉 ★★☆☆) 418
分金條的最小花費(尉 ★★☆☆) 421
大樓輪廓問題(將 ★★★★) 423
加油站良好出發點問題(校 ★★★☆) 432
容器盛水問題(校 ★★★☆) 439
第9章 其他題目 444
從5隨機到7隨機及其擴展