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