本書內(nèi)容包括:本書的使用方法介紹,C/C++快速入門,C++標準模板庫(STL)介紹等。
這本書籍是《算法筆記》的配套訓(xùn)練書籍,有著PAT甲乙級的全部真題,并且每道題的題解都相當(dāng)詳細,給出的代碼也進行了大量的注釋,真正做到了“題解”二字,讀者在認真研習(xí)本書后可以對代碼能力得到不小的提升。
本書同時也是作者的實戰(zhàn)經(jīng)驗,書中總結(jié)了很多技巧,不僅可以作為考研機試和PAT的學(xué)習(xí)教材,對其他的一些算法考試(例如CCF的CSP考試)或者考研初試的數(shù)據(jù)結(jié)構(gòu)科目的學(xué)習(xí)和理解也很有幫助,甚至僅僅想學(xué)習(xí)經(jīng)典算法的讀者也能從本書中學(xué)到許多知識。
傳統(tǒng)的習(xí)題類書籍都有著一個問題,那就是書中的內(nèi)容無法“與時俱進”,一旦成書之后便無法在短時間內(nèi)進行修改或者完善。但是本書和《算法筆記》相同,也采用了書籍二維碼的方式,這使得本書可以隨時添加、更新題目,或者對書中的講解進行更進一步的深入。可以說這本書是一本“活”的習(xí)題集,能夠真正做到“與時俱進”。
本書作為《算法筆記》的配套習(xí)題集,適合用于研究生復(fù)試上機、PAT甲級與乙級考試、CCF的CSP認證等算法考試。本書中的題目全部配有詳細的題解,大部分題目都包含題意、樣例解釋、思路、注意點及參考代碼。
使用本書前,讀者應(yīng)先閱讀本書的配套教材《算法筆記》的對應(yīng)章節(jié),然后再以本書中的習(xí)題作為訓(xùn)練。訓(xùn)練時先獨立思考,不要馬上看書中的思路和相關(guān)內(nèi)容,如果有不會的題目可以暫時先跳過,過段時間再回頭重新做。如果題目確實有些難度,想了很久也不得要領(lǐng),那么可以閱讀該題的思路部分;如果多次提交卻總是無法通過全部數(shù)據(jù)點,那么可以閱讀該題的注意點部分,看看有什么邊界數(shù)據(jù)是自己沒有注意到的;當(dāng)對該題的寫法不太確定時,也可以閱讀參考代碼。
本書適合進行專題訓(xùn)練,即對一個章節(jié)的題目進行集中訓(xùn)練,這有助于對同一個算法進行詳細且細致的訓(xùn)練,而不會出現(xiàn)為了做題而做題、從頭到尾刷完P(guān)AT之后卻還是一點感覺都沒有的情況。本書上有些來自codeup的習(xí)題,可供讀者練習(xí)使用。
另外,本書將在每小節(jié)的最后配有一個二維碼,用以更新本節(jié)內(nèi)容或是對本節(jié)的新題進行補充;每章最后也會有一個二維碼,用來補充新內(nèi)容。本書的勘誤和內(nèi)容更新日志均體現(xiàn)在下面的二維碼,可供讀者查看實時更新。
前言
第1章 本書的使用方法 1
第2章 C/C++快速入門 2
2.1 基本數(shù)據(jù)類型 2
2.2 順序結(jié)構(gòu) 2
2.3 條件結(jié)構(gòu) 2
2.4 循環(huán)結(jié)構(gòu) 2
2.5 數(shù) 組 3
2.6 函 數(shù) 3
2.7 指 針 3
2.8 結(jié)構(gòu)體(struct)的使用 3
2.9 補 充 3
2.10 黑盒測試 4
第3章 入門篇(1)——入門模擬 5
3.1 簡單模擬 5
3.2 查找元素 29
3.3 圖形輸出 43
3.4 日期處理 50
3.5 進制轉(zhuǎn)換 50
3.6 字符串處理 58
第4章 入門篇(2)——算法初步 87
4.1 排 序 87
4.2 散 列 128
4.3 遞 歸 148
4.4 貪 心 148
4.5 二 分 165
4.6 two pointers 176
4.7 其他高效技巧與算法 184
第5章 入門篇(3)——數(shù)學(xué)問題 189
5.1 簡單數(shù)學(xué) 189
5.2 最大公約數(shù)與最小公倍數(shù) 201
5.3 分數(shù)的四則運算 203
5.4 素 數(shù) 209
5.5 質(zhì)因子分解 218
5.6 大整數(shù)運算 223
5.7 擴展歐幾里得算法 231
5.8 組合數(shù) 231
第6章 C++標準模板庫(STL)介紹 232
6.1 vector的常見用法詳解 232
6.2 set的常見用法詳解 238
6.3 string的常見用法詳解 241
6.4 map的常用用法詳解 244
6.5 queue的常見用法詳解 256
6.6 priority_queue的常見用法詳解 256
6.7 stack的常見用法詳解 257
6.8 pair的常見用法詳解 257
6.9 algorithm頭文件下常用函數(shù)介紹 257
第7章 提高篇(1)——數(shù)據(jù)結(jié)構(gòu)專題(1) 258
7.1 棧的應(yīng)用 258
7.2 隊列的應(yīng)用 261
7.3 鏈表處理 264
第8章 提高篇(2)——搜索專題 278
8.1 深度優(yōu)先搜索(DFS) 278
8.2 廣度優(yōu)先搜索(BFS) 281
第9章 提高篇(3)——數(shù)據(jù)結(jié)構(gòu)專題(2) 286
9.1 樹與二叉樹 286
9.2 二叉樹的遍歷 286
9.3 樹的遍歷 296
9.4 二叉查找樹(BST) 316
9.5 平衡二叉樹(AVL樹) 325
9.6 并查集 329
9.7 堆 333
9.8 赫夫曼樹 337
第10章 提高篇(4)——圖算法專題 338
10.1 圖的定義和相關(guān)術(shù)語 338
10.2 圖的存儲 338
10.3 圖的遍歷 338
10.4 最短路徑 357
10.5 最小生成樹 385
10.6 拓撲排序 386
10.7 關(guān)鍵路徑 386
第11章 提高篇(5)——動態(tài)規(guī)劃專題 387
11.1 動態(tài)規(guī)劃的遞歸寫法和遞推寫法 387
11.2 最大連續(xù)子序列和 387
11.3 最長不下降子序列(LIS) 390
11.4 最長公共子序列(LCS) 392
11.5 最長回文子串 394
11.6 DAG最長路 396
11.7 背包問題 396
11.8 總 結(jié) 399
第12章 提高篇(6)——字符串專題 400
12.1 字符串hash 400
12.2 KMP算法 402
第13章 專題擴展 403
13.1 分塊思想 403
13.2 樹狀數(shù)組 406
13.3 快樂模擬 408
附 錄 430