第1章 編程基礎 1
1.1 變量 1
1.1.1 輸出和輸入 2
1.1.2 簡單變量類型 3
1.1.3 數(shù)學計算 6
1.1.4 位運算 7
1.1.5 使用字符串 11
1.2 三大結構 15
1.2.1 循序結構 15
1.2.2 分支結構 16
1.2.3 條件判斷 18
1.2.4 應用分支結構 20
1.2.5 循環(huán)結構 21
1.2.6 continue和break 23
1.2.7 應用循環(huán)結構 24
1.2.8 結構的嵌套 26
1.3 列表 27
1.3.1 定義列表 27
1.3.2 對元素進行操作 28
1.3.3 列表的順序 31
1.3.4 列表內置函數(shù) 33
1.3.5 截取和拼接列表 36
1.3.6 字符串、元組和列表 38
1.3.7 用循環(huán)遍歷列表 40
1.3.8 字典簡介 41
1.4 函數(shù) 43
1.4.1 定義子函數(shù) 43
1.4.2 主函數(shù) 44
1.4.3 調用函數(shù) 45
1.4.4 全局變量 47
1.4.5 函數(shù)的運用 48
第2章 雙指針問題 53
2.1 數(shù)組合并 53
2.1.1 合并有序數(shù)組 53
2.1.2 最終代碼 56
2.2 二分查找 56
2.2.1 什么是二分查找 57
2.2.2 問題求解 58
2.2.3 最終代碼 60
2.3 鏈表 60
2.3.1 什么是單鏈表 60
2.3.2 建立單鏈表 61
2.3.3 建立雙鏈表 63
2.3.4 雙向輸出雙鏈表 65
2.3.5 向單鏈表中添加元素 66
2.3.6 向雙鏈表中添加元素 69
2.3.7 刪除列表中的元素 71
第3章 哈希算法 75
3.1 什么是哈希 75
3.2 兩個數(shù)的和 78
3.2.1 問題求解1 78
3.2.2 解法1的最終代碼 80
3.2.3 問題求解2 81
3.2.4 解法2的最終代碼 82
3.3 單詞模式匹配 82
3.3.1 問題求解 83
3.3.2 最終代碼 85
3.4 猜詞游戲 85
3.4.1 問題求解 87
3.4.2 最終代碼 88
3.5 神奇的詞根 89
3.5.1 問題求解 90
3.5.2 最終代碼 92
第4章 深度優(yōu)先遍歷算法 93
4.1 什么是深度優(yōu)先遍歷 93
4.2 二叉樹 95
4.2.1 二叉樹的類型 95
4.2.2 二叉樹的相關術語 96
4.2.3 二叉樹的節(jié)點代碼 97
4.2.4 二叉樹的遍歷順序 97
4.2.5 深度優(yōu)先遍歷與廣度優(yōu)先遍歷 97
4.3 怎么抓住小偷 98
4.3.1 解題思路 98
4.3.2 從思路到代碼 102
4.4 二叉樹中的最大路徑和 102
4.4.1 解題思路 103
4.4.2 完整代碼 112
4.5 最大的島嶼 113
4.5.1 解題思路 113
4.5.2 完整代碼 116
第5章 廣度優(yōu)先遍歷算法 118
5.1 什么是廣度優(yōu)先遍歷 118
5.2 選課的智慧 120
5.2.1 廣度優(yōu)先遍歷 121
5.2.2 問題求解 122
5.2.3 最終代碼 124
5.3 尋找制高點 125
5.3.1 問題求解 126
5.3.2 集合 129
5.3.3 最終代碼 130
5.4 合法的括號 131
5.4.1 問題求解 131
5.4.2 最終代碼 135
5.5 樹的右側 136
5.5.1 問題求解 136
5.5.2 最終代碼 139
第6章 回溯算法 141
6.1 什么是回溯 141
6.2 遍歷所有排序方式 142
6.2.1 問題求解 142
6.2.2 最終代碼 144
6.3 經典問題的組合 147
6.3.1 問題求解 147
6.3.2 最終代碼 149
6.4 查找單詞問題 151
6.4.1 問題求解 152
6.4.2 最終代碼 155
6.5 八皇后問題 157
6.5.1 問題求解 158
6.5.2 最終代碼 160
6.6 教你解數(shù)獨 164
6.6.1 問題求解 165
6.6.2 最終代碼 168
第7章 貪心算法 172
7.1 硬幣找零問題 173
7.1.1 問題描述 173
7.1.2 最終代碼 175
7.2 活動安排問題 175
7.2.1 問題描述 176
7.2.2 最終代碼 177
7.3 哈夫曼編碼 178
7.3.1 問題描述 178
7.3.2 哈夫曼樹 179
7.3.3 貪心選擇性質 181
7.3.4 最優(yōu)子結構性質 182
7.3.5 最終代碼 183
第8章 動態(tài)規(guī)劃算法 185
8.1 爬樓梯問題 185
8.1.1 問題描述 186
8.1.2 最終代碼 188
8.2 礦工挖礦問題 189
8.2.1 問題描述 189
8.2.2 最終代碼 195
8.3 背包問題 195
8.3.1 問題描述 195
8.3.2 問題實例 196
8.3.3 最終代碼 201
8.4 最長遞歸子序列問題 202
8.4.1 問題描述 202
8.4.2 改進算法 204
8.4.3 最終代碼 205
第9章 最短路徑問題 207
9.1 迪可斯特朗算法 207
9.1.1 術語釋義 208
9.1.2 問題示例:最短公交線路 208
9.1.3 圖與節(jié)點的定義 209
9.1.4 把圖用代碼“畫”出來 210
9.1.5 算法核心:兩個節(jié)點集合 210
9.1.6 算法核心:循環(huán) 210
9.1.7 輸出路線 211
9.1.8 通過示例理解算法 211
9.1.9 完整代碼展示 214
9.2 Floyd算法 216
9.2.1 算法核心:兩個矩陣 216
9.2.2 算法核心:通過中介點縮短距離 217
9.2.3 通過示例理解算法 218
9.2.4 完整代碼 222
9.3 A*算法 223
9.3.1 算法核心:迪可斯特朗算法 223
9.3.2 算法核心:預估函數(shù) 224
9.3.3 算法核心:選擇預估函數(shù) 226
9.3.4 A*算法的兄弟們 226
第10章 分治算法 227
10.1 什么是分治 227
10.2 歸并排序 228
10.2.1 遞歸法與迭代法 228
10.2.2 遞歸法描述 229
10.2.3 迭代法描述 232
10.2.4 最終代碼 233
10.3 連續(xù)子列表的最大和 235
10.3.1 解題思路 235
10.3.2 最終代碼 237
10.4 幾何問題之凸包 238
10.4.1 問題求解 238
10.4.2 最終代碼 240
10.5 數(shù)學問題之多項式乘法 242
10.5.1 問題求解 242
10.5.2 最終代碼 245