《前端程式設計師面試算法寶典 》是2019年機械工業出版社出版的圖書,作者是平文、楚秦等。
基本介紹
- 書名:前端程式設計師面試算法寶典
- 作者:平文
- ISBN:9787111625391
- 頁數:245
- 定價:59
- 出版社:機械工業出版社
- 出版時間:2019-6-1
- 裝幀:平裝-膠訂
- 開本:16開
內容簡介,目錄,
內容簡介
本書是一本講解前端程式設計師面試筆試真題的書籍,在寫法上,除了講解如何解答算法問題以外,還引入了示例輔以說明,讓讀者能夠更容易理解。
本書喇厚戶將程式設計師面試筆試過程中各類算法類真拜槓晚題一網打盡,在題目的廣度上歸應府享,通過各種渠道,蒐集了近3年來典型IT企業面試筆試算法高頻題目,所選擇題目均為企業招聘使用題目。在題目的深度上,本書由淺入深,詳細分析每一個題目,並提煉歸納。同時,引入例子與原始碼、時間複雜度與空間複雜度的分析,而這些內容是其他同類書籍所沒有的。本書根據真題所屬知識點進行分門別類,結構合理、條理清晰,對於讀者進行學習與檢索意義重大。
本書是一本計算機相關專業畢業生面試筆試的求職用書,也可以作為本科生、研究生學習數據結構與算法的輔導書籍,同時也適合期望在計算機軟硬體行業大顯身手的計算機愛好者閱讀。
本書喇厚戶將程式設計師面試筆試過程中各類算法類真拜槓晚題一網打盡,在題目的廣度上歸應府享,通過各種渠道,蒐集了近3年來典型IT企業面試筆試算法高頻題目,所選擇題目均為企業招聘使用題目。在題目的深度上,本書由淺入深,詳細分析每一個題目,並提煉歸納。同時,引入例子與原始碼、時間複雜度與空間複雜度的分析,而這些內容是其他同類書籍所沒有的。本書根據真題所屬知識點進行分門別類,結構合理、條理清晰,對於讀者進行學習與檢索意義重大。
本書是一本計算機相關專業畢業生面試筆試的求職用書,也可以作為本科生、研究生學習數據結構與算法的輔導書籍,同時也適合期望在計算機軟硬體行業大顯身手的計算機愛好者閱讀。
目錄
前言
面試筆試經驗技巧篇
經驗技巧1 如何巧妙地回答面試官的問題2
經驗技巧2 如何回答技術性的問題3
經驗技巧3 如何回答非技術性問題4
經驗技巧4 如何回答快速估算類問題5
經驗技巧舟備擔5 如何回答算法設計問題6
經驗技巧6 如何回答系統設計題8
經驗技巧7 如何解決求職中的時間衝突問題11
經驗技巧8 如果面試問題曾經遇見過,是否要告知面試官12
經驗技巧9 在被企業拒絕後是否可以再申請12
經驗技巧10 如何應對自己不會回答的問題13
經驗技巧11 如何應對面試官的“激將法”13
經驗技巧12 如何處理與面試官持不同觀點這個問題14
經驗技巧13 什麼是職場暗語14
面試筆試真題解析篇
第1章 經典算法題19
1.1 有多少蘋果用來分贓19
1.2 哪只猴子可以當大王20
1.3 移動多少盤子才能完成漢諾塔遊戲21
1.4 如何利用約瑟夫環來保護你與你的朋友22
1.5 怎樣才能得到阿姆斯壯數24
1.6 如何獲取規定的排列組合25
1.7 如何實現洗牌算法26
1.8 怎樣求出斐波那契數列27
1.9 如何實現楊輝三角28
1.10 牛的數量有多少29
1.11 百錢買百雞29
1.12 經過這個路口多少次30
1.13 球的反彈高度有多高31
1.14 如何找出1000以內的“完數”31
1.15 猴子吃了多少桃子32
1.16 移動最少次數的三色旗33
第2章 邏輯、智力題35
2.1 經典邏輯題35
2.1.1 老鼠相遇的機率是多少35
2.1.2 如何計算時鐘的三針重疊35
2.1.3 如何喝到最多瓶汽水36
2.1.4 住旅店花了多少錢36
2.1.5 如何判斷哪個開關控制著哪盞燈36
2.1.6 如何用燒繩來計算時間36
2.1.7 如何用水壺獲取指定的水量37
2.1.8 怎樣才能猜出另外兩個人的數37
2.1.9 賣雞總共賺了多少38
2.1.10 跳高名次是多少38
2.1.11 如何根據銀幣猜盒子39
2.1.12 馬牛羊的價格是多少文錢39
2.1.13 賠多少39
2.1.14 海盜頁刪愉如何分金才能讓他獲得最多的金子40
2.1.15 張老師的生日是哪一天41
2.1.16 拿幾個組拳盼敬桌球41
2.2 邏輯推理題42
2.2.1 怎樣才能推理出學生的專業42
2.2.2 錯誤的判斷是哪一個43
2.2.3 最後參加緊急項目的開發人是誰43
2.2.4 猜的第一個數字是多少43
2.2.5 需要多少個人測試才能判斷出毒酒44
2.2.6 地圖重合點有幾個45
2.2.7 掰斷多少次金條才能按要求給僱工報酬46
2.2.8 握手次數是多少46
2.2.9 如何判斷出壞雞蛋47
2.3 機率與組合48
2.3.1 抽球人數是多少48
2.3.2 案件發生在A區的可能性采檔是多少48
2.3.3 男女比例將會是多少48
2.3.4 對稱矩陣有多少個49
2.3.5 A、B點有多少種走法49
2.3.6 多少種排隊方式50
2.3.7 把球放到小桶中有多少种放法51
2.3.8 正確描述100台虛擬機發生故障的是哪一個51
2.3.9 圓桌上一共有多少種坐法51
2.3.10 兵馬俑博物館可容納多少人52
2.3.11 兩種策略的預期收益是多少52
2.3.12 拾起別人帽子的機率是多少53
2.3.13 合法表達式有多少個53
2.3.14 會寫Java和C++程式的有多少人54
2.3.15 乘坐甲車的機率是多少54
2.3.16 A到Z的最短路徑數是多少54
2.3.17 選取紅黃白球的機率是多少55
2.3.18 一共有多少種染色情況55
2.3.19 肇事車是白車的機率是多少55
2.3.20 獲得冠軍的情況有多少種56
2.3.21 一紅一黑的機率是多少56
2.3.22 誰會贏56
2.3.23 描述正確的是哪一項57
2.4 數學計算58
2.4.1 一共等了女神多少分鐘58
2.4.2 使用了什麼進制運算58
2.4.3 三角形有多少個59
2.4.4 數列的規律是什麼60
2.4.5 數列使用了什麼規律60
2.4.6 餘數是多少60
2.4.7 如何才能找到最好的羽毛球員工61
2.4.8 亮著的燈泡有多少個61
2.4.9 工作時長是多少62
2.4.10 最小夾角是多少度62
2.4.11 求解到的餘數是多少62
2.4.12 如何正確計算餘數63
2.4.13 最高效的矩陣是哪個63
2.4.14 可以實現的函式是哪個63
2.4.15 可以兌換多少瓶加多寶64
2.4.16 共賺多少錢64
2.4.17 實際折扣是多少65
第3章 排序算法66
3.1 如何實現冒泡排序67
3.2 什麼是插入排序70
3.3 歸併排序的原理是什麼72
3.4 快速排序使用了什麼思想73
3.5 選擇排序的實現過程是怎樣的75
3.6 什麼叫希爾排序78
3.7 如何實現堆排序79
3.8 計數排序的原理是什麼81
3.9 怎樣用JavaScript代碼實現桶排序83
第4章 鍊表85
4.1 如何實現鍊表的逆序85
4.2 如何從無序鍊表中移除重複項91
4.3 如何計算兩個單鍊表所代表的數之和95
4.4 如何對鍊表進行重新排序99
4.5 如何找出單鍊表中的倒數第k個元素102
4.6 如何檢測一個較大的單鍊表是否有環107
4.7 如何把鍊表相鄰元素翻轉110
4.8 如何把鍊表以k個結點為一組進行翻轉112
4.9 如何合併兩個有序鍊表116
第5章 棧與佇列120
5.1 如何實現棧120
5.2 如何實現佇列124
5.3 如何翻轉棧的所有元素128
5.4 如何根據入棧序列判斷可能的出棧序列134
5.5 如何用O(1)的時間複雜度求棧中最小元素138
5.6 如何用兩個棧模擬佇列操作140
第6章 二叉樹141
6.1 二叉樹基礎知識141
6.2 如何實現二叉樹143
6.3 如何把一個有序的整數數組放到二叉樹中148
6.4 如何用二叉樹實現多層級分類151
6.5 如何找到二叉樹中的最大最小值153
6.6 如何對二叉樹進行遍歷155
6.7 如何判斷一棵二叉樹是否是二叉樹158
第7章 數組161
7.1 如何找出數組中唯一的重複元素161
7.2 如何查找數組中元素的最大值和最小值166
7.3 如何找出旋轉數組的最小元素170
7.4 如何找出數組中丟失的數172
7.5 如何找出數組中出現奇數次的數174
7.6 如何找出數組中第k小的數176
7.7 如何求數組中兩個元素的最小距離179
7.8 如何求解最小三元組距離181
7.9 如何求數組連續最大和184
7.10 如何求數組中絕對值最小的數188
7.11 如何找出數組中出現一次的數190
7.12 如何在不排序的情況下求數組的中位數192
7.13 如何求集合的所有子集194
7.14 如何對數組進行循環移位196
7.15 如何在有規律的二維數組中進行高效的數據查找198
7.16 如何尋找最多的覆蓋點200
7.17 如何判斷請求能否在給定的存儲條件下完成201
7.18 如何按要求構造新的數組203
7.19 如何獲取最好的矩陣鏈相乘方法204
7.20 如何求解迷宮問題206
7.21 如何從三個有序數組中找出它們的公共元素208
第8章 基本數字運算210
8.1 如何判斷一個自然數是否是某個數的二次方210
8.2 如何判斷一個數是否為2的n次方212
8.3 如何不使用除法操作符實現兩個正整數的除法213
8.4 如何只使用遞增運算符(++)實現加減乘除運算218
8.5 如何根據已知隨機數生成函式計算新的隨機數220
8.6 如何判斷1024!末尾有多少個0221
8.7 如何按要求比較兩個數的大小222
8.8 如何求有序數列的第1500個數的值222
8.9 如何求二進制數中1的個數224
8.10 如何計算一個數的n次方225
8.11 如何在不能使用庫函式的條件下計算正數n的算術平方根227
8.12 如何不使用“^”符號實現異或運算227
8.13 如何不使用循環輸出1~100228
第9章 排列組合與機率230
9.1 如何拿到最多金幣230
9.2 如何求正整數n所有可能的整數組合231
9.3 如何用一個隨機函式得到另外一個隨機函式233
9.4 如何等機率地從大小為n的數組中選取m個整數234
9.5 如何計算1、2、5這三個數使其和為100的組合個數235
9.6 如何判斷有幾盞燈泡還亮著236
第10章 海量數據處理238
10.1 如何從大量的url中找出相同的url238
10.2 如何從大量數據中找出高頻詞239
10.3 如何找出某一天訪問百度網站最多的IP240
10.4 如何在大量的數據中找出不重複的整數240
10.5 如何在大量的數據中判斷一個數是否存在241
10.6 如何查詢最熱門的查詢串241
10.7 如何統計不同電話號碼的個數243
10.8 如何從5億個數中找出中位數243
10.9 如何按照query的頻度排序245
2.1.8 怎樣才能猜出另外兩個人的數37
2.1.9 賣雞總共賺了多少38
2.1.10 跳高名次是多少38
2.1.11 如何根據銀幣猜盒子39
2.1.12 馬牛羊的價格是多少文錢39
2.1.13 賠多少39
2.1.14 海盜如何分金才能讓他獲得最多的金子40
2.1.15 張老師的生日是哪一天41
2.1.16 拿幾個桌球41
2.2 邏輯推理題42
2.2.1 怎樣才能推理出學生的專業42
2.2.2 錯誤的判斷是哪一個43
2.2.3 最後參加緊急項目的開發人是誰43
2.2.4 猜的第一個數字是多少43
2.2.5 需要多少個人測試才能判斷出毒酒44
2.2.6 地圖重合點有幾個45
2.2.7 掰斷多少次金條才能按要求給僱工報酬46
2.2.8 握手次數是多少46
2.2.9 如何判斷出壞雞蛋47
2.3 機率與組合48
2.3.1 抽球人數是多少48
2.3.2 案件發生在A區的可能性是多少48
2.3.3 男女比例將會是多少48
2.3.4 對稱矩陣有多少個49
2.3.5 A、B點有多少種走法49
2.3.6 多少種排隊方式50
2.3.7 把球放到小桶中有多少种放法51
2.3.8 正確描述100台虛擬機發生故障的是哪一個51
2.3.9 圓桌上一共有多少種坐法51
2.3.10 兵馬俑博物館可容納多少人52
2.3.11 兩種策略的預期收益是多少52
2.3.12 拾起別人帽子的機率是多少53
2.3.13 合法表達式有多少個53
2.3.14 會寫Java和C++程式的有多少人54
2.3.15 乘坐甲車的機率是多少54
2.3.16 A到Z的最短路徑數是多少54
2.3.17 選取紅黃白球的機率是多少55
2.3.18 一共有多少種染色情況55
2.3.19 肇事車是白車的機率是多少55
2.3.20 獲得冠軍的情況有多少種56
2.3.21 一紅一黑的機率是多少56
2.3.22 誰會贏56
2.3.23 描述正確的是哪一項57
2.4 數學計算58
2.4.1 一共等了女神多少分鐘58
2.4.2 使用了什麼進制運算58
2.4.3 三角形有多少個59
2.4.4 數列的規律是什麼60
2.4.5 數列使用了什麼規律60
2.4.6 餘數是多少60
2.4.7 如何才能找到最好的羽毛球員工61
2.4.8 亮著的燈泡有多少個61
2.4.9 工作時長是多少62
2.4.10 最小夾角是多少度62
2.4.11 求解到的餘數是多少62
2.4.12 如何正確計算餘數63
2.4.13 最高效的矩陣是哪個63
2.4.14 可以實現的函式是哪個63
2.4.15 可以兌換多少瓶加多寶64
2.4.16 共賺多少錢64
2.4.17 實際折扣是多少65
第3章 排序算法66
3.1 如何實現冒泡排序67
3.2 什麼是插入排序70
3.3 歸併排序的原理是什麼72
3.4 快速排序使用了什麼思想73
3.5 選擇排序的實現過程是怎樣的75
3.6 什麼叫希爾排序78
3.7 如何實現堆排序79
3.8 計數排序的原理是什麼81
3.9 怎樣用JavaScript代碼實現桶排序83
第4章 鍊表85
4.1 如何實現鍊表的逆序85
4.2 如何從無序鍊表中移除重複項91
4.3 如何計算兩個單鍊表所代表的數之和95
4.4 如何對鍊表進行重新排序99
4.5 如何找出單鍊表中的倒數第k個元素102
4.6 如何檢測一個較大的單鍊表是否有環107
4.7 如何把鍊表相鄰元素翻轉110
4.8 如何把鍊表以k個結點為一組進行翻轉112
4.9 如何合併兩個有序鍊表116
第5章 棧與佇列120
5.1 如何實現棧120
5.2 如何實現佇列124
5.3 如何翻轉棧的所有元素128
5.4 如何根據入棧序列判斷可能的出棧序列134
5.5 如何用O(1)的時間複雜度求棧中最小元素138
5.6 如何用兩個棧模擬佇列操作140
第6章 二叉樹141
6.1 二叉樹基礎知識141
6.2 如何實現二叉樹143
6.3 如何把一個有序的整數數組放到二叉樹中148
6.4 如何用二叉樹實現多層級分類151
6.5 如何找到二叉樹中的最大最小值153
6.6 如何對二叉樹進行遍歷155
6.7 如何判斷一棵二叉樹是否是二叉樹158
第7章 數組161
7.1 如何找出數組中唯一的重複元素161
7.2 如何查找數組中元素的最大值和最小值166
7.3 如何找出旋轉數組的最小元素170
7.4 如何找出數組中丟失的數172
7.5 如何找出數組中出現奇數次的數174
7.6 如何找出數組中第k小的數176
7.7 如何求數組中兩個元素的最小距離179
7.8 如何求解最小三元組距離181
7.9 如何求數組連續最大和184
7.10 如何求數組中絕對值最小的數188
7.11 如何找出數組中出現一次的數190
7.12 如何在不排序的情況下求數組的中位數192
7.13 如何求集合的所有子集194
7.14 如何對數組進行循環移位196
7.15 如何在有規律的二維數組中進行高效的數據查找198
7.16 如何尋找最多的覆蓋點200
7.17 如何判斷請求能否在給定的存儲條件下完成201
7.18 如何按要求構造新的數組203
7.19 如何獲取最好的矩陣鏈相乘方法204
7.20 如何求解迷宮問題206
7.21 如何從三個有序數組中找出它們的公共元素208
第8章 基本數字運算210
8.1 如何判斷一個自然數是否是某個數的二次方210
8.2 如何判斷一個數是否為2的n次方212
8.3 如何不使用除法操作符實現兩個正整數的除法213
8.4 如何只使用遞增運算符(++)實現加減乘除運算218
8.5 如何根據已知隨機數生成函式計算新的隨機數220
8.6 如何判斷1024!末尾有多少個0221
8.7 如何按要求比較兩個數的大小222
8.8 如何求有序數列的第1500個數的值222
8.9 如何求二進制數中1的個數224
8.10 如何計算一個數的n次方225
8.11 如何在不能使用庫函式的條件下計算正數n的算術平方根227
8.12 如何不使用“^”符號實現異或運算227
8.13 如何不使用循環輸出1~100228
第9章 排列組合與機率230
9.1 如何拿到最多金幣230
9.2 如何求正整數n所有可能的整數組合231
9.3 如何用一個隨機函式得到另外一個隨機函式233
9.4 如何等機率地從大小為n的數組中選取m個整數234
9.5 如何計算1、2、5這三個數使其和為100的組合個數235
9.6 如何判斷有幾盞燈泡還亮著236
第10章 海量數據處理238
10.1 如何從大量的url中找出相同的url238
10.2 如何從大量數據中找出高頻詞239
10.3 如何找出某一天訪問百度網站最多的IP240
10.4 如何在大量的數據中找出不重複的整數240
10.5 如何在大量的數據中判斷一個數是否存在241
10.6 如何查詢最熱門的查詢串241
10.7 如何統計不同電話號碼的個數243
10.8 如何從5億個數中找出中位數243
10.9 如何按照query的頻度排序245