Go程序員面試演算法寶典 | 被動收入的投資秘訣 - 2024年9月
![](https://www.books.com.tw/img/CN1/163/96/CN11639646.jpg)
Go程序員面試演算法寶典
本書是一本講解Go語言程序員面試筆試真題的書籍,在寫法上,除了講解如何解答演算法問題以外,還引入了例子輔以說明,讓讀者能夠更加容易理解。本書將程序員面試筆試過程中各類演算法類真題一網打盡,在題目的廣度上,通過各種渠道收集了近3年來IT企業面試筆試演算法高頻題目,所選擇題目均為企業招聘使用題目。
在題目的深度上,本書由淺入深、庖丁解牛般地分析每一個題目,並提煉歸納,同時引入例子與源代碼、時間複雜度與空間複雜度的分析,而這些內容是其他同類書籍所沒有的。本書根據真題所屬知識點進行分門別類,結構合理、條理清晰,對讀者學習與檢索意義重大。本書是一本電腦相關專業畢業生面試筆試的求職用書,可以作為本科生、研究生學習數據結構與演算法的輔導書籍,同時也適合期望在電腦軟硬體行業大顯身手的電腦愛好者閱讀。
前言
面試筆試經驗技巧篇
經驗技巧1 如何巧妙地回答面試官的問題2
經驗技巧2 如何回答技術性的問題3
經驗技巧3 如何回答非技術性問題5
經驗技巧4 如何回答快速估算類問題5
經驗技巧5 如何回答演算法設計問題6
經驗技巧6 如何回答系統設計題9
經驗技巧7 如何解決求職中的時間衝突問題12
經驗技巧8 如果面試問題曾經遇見過,是否要告知面試官12
經驗技巧9 被企業拒絕後是否可以再申請13
經驗技巧10 如何應對自己不會回答的問題14
經驗技巧11 如何應對面試官的“激將法”14
經驗技巧12 如何處理與面試官持不同觀點這個問題15
經驗技巧13 什麼是職場暗語16
面試筆試真題解析篇
第1章 鏈表21
1.1 如何實現鏈表的逆序22
1.2 如何從無序鏈表中移除重複項25
1.3 如何計算兩個單鏈表所代表的數之和29
1.4 如何對鏈表進行重新排序32
1.5 如何找出單鏈表中的倒數第k個元素34
1.6 如何檢測一個較大的單鏈表是否有環37
1.7 如何把鏈表相鄰元素翻轉39
1.8 如何把鏈表以k個結點為一組進行翻轉41
1.9 如何合併兩個有序鏈表44
1.10 如何在只給定單鏈表中某個結點指標的情況下刪除該結點46
1.11 如何判斷兩個單鏈表(無環)是否交叉48
1.12 如何展開連結清單52
第2章 棧、佇列與雜湊56
2.1 如何實現棧56
2.2 如何實現佇列60
2.3 如何翻轉棧的所有元素65
2.4 如何根據入棧序列判斷可能的出棧序列70
2.5 如何用O(1)的時間複雜度求棧中最小元素73
2.6 如何用兩個棧類比佇列操作74
2.7 如何設計一個排序系統76
2.8 如何實現LRU緩存方案77
2.9 如何從給定的車票中找出旅程路線79
2.10 如何從陣列中找出滿足a+b=c+d的兩個數對81
第3章 二叉樹83
3.1 二叉樹基礎知識83
3.2 如何把一個有序整數陣列放到二叉樹中85
3.3 如何從頂部開始逐層列印二叉樹結點數據86
3.4 如何求一棵二叉樹的最大子樹和89
3.5 如何判斷兩棵二叉樹是否相等91
3.6 如何把二叉樹轉換為雙向鏈表92
3.7 如何判斷一個陣列是否是二元查找樹後序遍歷的序列94
3.8 如何找出排序二叉樹上任意兩個結點的最近共同父結點96
3.9 如何複製二叉樹102
3.10 如何在二叉樹中找出與輸入整數相等的所有路徑103
3.11 如何對二叉樹進行鏡像反轉105
3.12 如何在二叉排序樹中找出第一個大於中間值的結點106
3.13 如何在二叉樹中找出路徑最大的和108
3.14 如何實現反向DNS查找緩存111
第4章 陣列114
4.1 如何找出陣列中唯一的重複元素114
4.2 如何查找陣列中元素的最大值和最小值121
4.3 如何找出旋轉陣列的最小元素124
4.4 如何找出陣列中丟失的數128
4.5 如何找出陣列中出現奇數次的數130
4.6 如何找出陣列中第k小的數133
4.7 如何求陣列中兩個元素的最小距離137
4.8 如何求解最小三元組距離139
4.9 如何求陣列中絕對值最小的數144
4.10 如何求陣列連續最大和147
4.11 如何找出陣列中出現1次的數152
4.12 如何旋轉陣列154
4.13 如何在不排序的情況下求陣列中的中位數156
4.14 如何求集合的所有子集158
4.15 如何對陣列進行迴圈移位元161
4.16 如何在有規律的二維陣列中進行高效的資料查找164
4.17 如何尋找最多的覆蓋點166
4.18 如何判斷請求能否在給定的存儲條件下完成167
4.19 如何按要求構造新的陣列169
4.20 如何獲取最好的矩陣鏈相乘方法171
4.21 如何求解迷宮問題173
4.22 如何從三個有序數組中找出它們的公共元素176
4.23 如何求兩個有序集合的交集177
4.24 如何對有大量重複的數位的陣列排序181
4.25 如何對任務進行調度185
4.26 如何對磁碟分割187
第5章 字串189
5.1 如何求一個字串的所有排列189
5.2 如何求兩個字串的最長公共子串194
5.3 如何對字串進行反轉198
5.4 如何判斷兩個字串是否為換位元字串201
5.5 如何判斷兩個字串的包含關係202
5.6 如何對由大小寫字母組成的字元陣列排序206
5.7 如何消除字串的內嵌括弧207
5.8 如何判斷字串是否是整數208
5.9 如何實現字串的匹配212
5.10 如何求字串裡的最長回文子串215
5.11 如何按照給定的字母序列對字元陣列排序222
5.12 如何判斷一個字串是否包含重複字元225
5.13 如何找到由其他單詞組成的最長單詞227
5.14 如何統計字串中連續的重複字元個數229
5.15 如何求最長遞增子序列的長度230
5.16 求一個串中出現的第一個最長重複子串232
5.17 如何求解字串中字典序最大的子序列233
5.18 如何判斷一個字串是否由另外一個字串旋轉得到236
5.19 如何求字串的編輯距離238
5.20 如何在二維陣列中尋找最短路線240
5.21 如何截取包含中文的字串244
5.22 如何求相對路徑244
5.23 如何查找到達目標詞的最短鏈長度246
第6章 基本數位運算249
6.1 如何判斷一個自然數是否是某個數的平方249
6.2 如何判斷一個數是否為2的n次方252
6.3 如何不使用除法操作符實現兩個正整數的除法253
6.4 如何只使用++操作符實現加減乘除運算258
6.5 如何根據已知隨