黨的二十大報告中指出: 教育、科技、人才是全面建設社會主義現代化國家的基礎性、戰(zhàn)略性支撐。必須堅持科技是第一生產力、人才是第一資源、創(chuàng)新是第一動力,深入實施科教興國戰(zhàn)略、人才強國戰(zhàn)略、創(chuàng)新驅動發(fā)展戰(zhàn)略,這三大戰(zhàn)略共同服務于創(chuàng)新型國家的建設。高等教育與經濟社會發(fā)展緊密相連,對促進就業(yè)創(chuàng)業(yè)、助力經濟社會發(fā)展、增進人民福祉具有重要意義。
本書是《算法設計與分析》(第3版·微課視頻·題庫版)(李春葆等,清華大學出版社)的配套在線編程實驗指導書。
全書分為10章,第1章是緒論,第2章是遞歸算法設計技術,第3~8章分別是窮舉法、分治法、回溯法、分支限界法、動態(tài)規(guī)劃和貪心法等算法設計策略,第9章和第10章分別是圖算法和計算幾何,與《教程》的前10章相對應。每章包含《教程》中的在線編程實驗題及其解析,共計186道,其中來自LeetCode(力扣)55道,LintCode(領扣)71道,POJ(北大)52道,HDU(杭電)8道。LeetCode和LintCode是極好的在線編程訓練、學習和交流平臺,POJ和HDU是國內最優(yōu)秀的ACM訓練平臺。LeetCode和LintCode題目用1~3星標記難易程度,分別為簡單、中等和困難。
書中精心選取的在線編程題不僅涵蓋算法設計與分析課程的主要知識點,還融合了各個知識點的運用和擴展,學習、理解和借鑒這些解題思路是掌握和提高算法設計能力的最佳途徑。
以在線編程平臺為實驗環(huán)境具有明顯的優(yōu)勢: 一是克服了單機編程測試數據不完整的缺陷,通常在線編程平臺中測試數據較多而且具有針對性,更方便檢測程序的正確性; 二是便于考查程序的時間和空間性能,通常在線編程平臺在提交成功時都會給出程序的執(zhí)行時間和消耗的內存空間大小,以便改進算法; 三是在線編程平臺題目眾多、資源豐富,可以選擇一些有趣且難度適中的題目供學生實驗,引導學生進入一片新的學習天地,激發(fā)學生的編程興趣。
書中全部在線編程題均在相關在線編程平臺中調試通過(選擇的語言為C )。考慮向下的兼容性,所有程序調試運行采用較低版本的Dev C 5.11作為編程環(huán)境,稍加修改可以在其他C 環(huán)境中運行。
源碼下載方法: 掃描封底的文泉云盤防盜碼,再掃描目錄上方的二維碼下載。
在此感謝LeetCode、LintCode、POJ和HDU平臺的大力支持。由于編者水平所限,盡管不遺余力,仍可能存在不足之處,敬請教師和同學們批評指正。
編者2024年1月
源碼下載
第1章緒論/
1.1LintCode1200相對排名★/
1.2LintCode1901有序數組的平方★/
1.3LintCode211字符串置換★/
1.4LintCode772錯位詞分組★★/
1.5LintCode55比較字符串★/
1.6LintCode460在排序數組中找最接近的k個數★★/
1.7LintCode424求逆波蘭表達式的值★★/
1.8LintCode1369最頻繁單詞★/
1.9LeetCode20有效的括號★/
1.10LeetCode1190反轉每對括號間的子串★★/
1.11LeetCode496下一個更大元素Ⅰ★/
1.12LeetCode217存在重復元素★/
1.13LeetCode3無重復字符的最長子串★★/
1.14POJ3664選舉時間/
1.15POJ2833平均數/
1.16POJ2491尋寶游戲/
第2章遞歸算法設計技術/
2.1LintCode452刪除鏈表中的元素★/
2.2LintCode217無序鏈表中重復項的刪除★/
2.3LintCode221鏈表求和Ⅱ★★/
2.4LintCode1181二叉樹的直徑★/
2.5LintCode1137從二叉樹構建字符串★/
2.6LintCode649二叉樹的翻轉★★/
2.7LintCode424求逆波蘭表達式的值★★/
2.8LeetCode50Pow(x,n)★★/
2.9LeetCode2312的冪★/
2.10LeetCode44通配符的匹配★★★/
2.11LeetCode1190反轉每對括號間的
子串★★/
2.12LeetCode59螺旋矩陣Ⅱ★★/
2.13LeetCode1106解析布爾表達式★★★/
2.14POJ1664放蘋果/
2.15POJ1747表達式/
2.16POJ1941Sierpinski分形/
2.17POJ3752字母旋轉游戲/
第3章窮舉法/
3.1LintCode1068尋找數組的中心索引★/
3.2LintCode1517最大子數組★/
3.3LintCode1338停車困境★/
3.4LintCode993數組劃分Ⅰ★/
3.5LintCode406和大于s的最小子數組★★/
3.6LintCode1331英語軟件★/
3.7LintCode397最長上升連續(xù)子序列★/
3.8LeetCode1534統(tǒng)計好三元組★/
3.9LeetCode204計數質數★★/
3.10LeetCode187重復的DNA序列★★/
3.11LeetCode2018判斷單詞是否能放入
填字游戲內★★/
3.12LeetCode2151基于陳述統(tǒng)計最多
好人數★★★/
3.13POJ2000金幣/
3.14POJ1013假幣問題/
3.15POJ1256字謎/
3.16POJ3187倒數和/
第4章分治法/
4.1LintCode1376等價字符串★★/
4.2LintCode31數組的劃分★★/
4.3LintCode143顏色的分類Ⅱ★★/
4.4LintCode628最大子樹★/
4.5LintCode900二叉搜索樹中最接近的值★/
4.6LintCode931k個有序數組的中位數★★★/
4.7LintCode1817分享巧克力★★★/
4.8LintCode1753寫作業(yè)★★/
4.9LintCode460在排序數組中找最接近的k個數★★/
4.10LintCode75尋找峰值★★/
4.11LeetCode912排序數組★★/
4.12LeetCode241為運算表達式設計優(yōu)先級★★/
4.13LeetCode4尋找兩個正序數組的中位數★★★/
4.14LeetCode148排序鏈表★★/
4.15LeetCode493翻轉對★★★/
4.16LeetCode1985找出數組中第k大的整數★★/
4.17POJ2299UltraQuickSort/
4.18POJ2623中位數/
4.19POJ3104烘干/
4.20POJ3273每月花費/
第5章回溯法/
5.1LintCode1353根結點到葉子結點求和★★/
5.2LintCode802數獨★★★/
5.3LintCode135數字組合★★/
5.4LintCode1915舉重★★★/
5.5LintCode680分割字符串★★/
5.6LintCode136分割回文串★★/
5.7LintCode816旅行商問題★★★/
5.8LeetCode784字母大小寫全排列★★/
5.9LeetCode1079活字印刷★★/
5.10LeetCode93復原IP地址★★/
5.11LeetCode22括號的生成★★/
5.12LeetCode89格雷編碼★★/
5.13LeetCode301刪除無效的括號★★★/
5.14POJ3050跳房子/
5.15POJ1724道路/
5.16POJ1699最佳序列/
5.17POJ1564求和/
5.18POJ2245組合/
5.19POJ1321棋盤問題/
5.20POJ2488騎士之旅/
第6章分支限界法/
6.1LintCode1376通知所有員工所需
的時間★★/
6.2LintCode1504獲取所有鑰匙的
最短路徑★★★/
6.3LintCode1685迷宮Ⅳ★★/
6.4LintCode1428鑰匙和房間★★/
6.5LintCode531六度問題★★/
6.6LintCode120單詞接龍★★★/
6.7LintCode1888矩陣中的最短路徑★★/
6.8LintCode803建筑物之間的
最短距離★★★/
6.9LeetCode1020飛地的數量★★/
6.10LeetCode752打開轉盤鎖★★/
6.11LeetCode773滑動謎題★★★/
6.12POJ1724道路/
6.13POJ2449第K條最短路徑長度/
6.14POJ1376機器人/
第7章動態(tài)規(guī)劃/
7.1LintCode41最大子數組★/
7.2LintCode110最小路徑和★/
7.3LintCode118不同的子序列★★/
7.4LintCode1147工作安排★★/
7.5LintCode553炸彈襲擊★★/
7.6LintCode107單詞拆分Ⅰ★★/
7.7LintCode436最大正方形★★/
7.8LintCode394硬幣排成線★★/
7.9LintCode125背包問題Ⅱ★★/
7.10LintCode440背包問題Ⅲ★★/
7.11LintCode563背包問題Ⅴ★★/
7.12LintCode669換硬幣★★/
7.13LintCode94二叉樹中的最大路徑和★★/
7.14LintCode1306旅行計劃Ⅱ★★★/
7.15LeetCode121買賣股票的最佳時機★/
7.16LeetCode122買賣股票的最佳時機Ⅱ★★/
7.17LeetCode123買賣股票的最佳時機Ⅲ★★★/
7.18LeetCode188買賣股票的最佳時機Ⅳ★★★/
7.19LeetCode309買賣股票的最佳時機(含冷凍期)★★/
7.20LeetCode714買賣股票的最佳時機(含手續(xù)費)★★/
7.21LeetCode91解碼方法★★/
7.22LeetCode650只有兩個鍵的鍵盤★★/
7.23LeetCode44通配符的匹配★★★/
7.24LeetCode10正則表達式的匹配★★★/
7.25LeetCode5最長回文子串★★/
7.26LeetCode516最長回文子序列★★/
7.27POJ2533最長遞增子序列/
7.28POJ1458公共子序列/
7.29POJ1837平衡/
7.30POJ3624手鏈/
7.31POJ1276取款機/
7.32POJ1947重建道路/
7.33POJ2904郵箱制造商問題/
第8章貪心法/
8.1LintCode920會議室★/
8.2LintCode919會議室Ⅱ★★/
8.3LintCode184最大數★★/
8.4LintCode187加油站★★/
8.5LintCode304最大乘積★★/
8.6LintCode358樹木規(guī)劃★/
8.7LintCode719計算最大值★★/
8.8LintCode761最小子集★★/
8.9LintCode891有效回文Ⅱ★★/
8.10LeetCode122買賣股票的最佳時機Ⅱ★★/
8.11LeetCode11盛水最多的容器★★/
8.12LeetCode881救生艇★★/
8.13LeetCode1029兩地調度★★/
8.14LeetCode402移掉k位數字★★/
8.15LeetCode763劃分字母區(qū)間★★/
8.16LeetCode630課程表Ⅲ★★★/
8.17LeetCode1353最多可以參加的會議數目★★/
8.18POJ2782裝箱/
8.19POJ3069標記/
8.20POJ1017產品包裝/
8.21POJ1862Stripies/
8.22POJ3262保護花朵/
8.23POJ2970懶惰的程序員/
8.24POJ1065加工木棍/
第9章圖算法/
9.1LintCode1565飛行棋Ⅰ★★/
9.2LeetCode1368至少有一條有效路徑的
最小代價★★★/
9.3POJ1751高速公路問題/
9.4POJ1287網絡/
9.5POJ1251維護村莊之路/
9.6POJ2349北極網絡/
9.7POJ2387貝西回家/
9.8POJ1125股票經紀人的小道消息/
9.9POJ1724道路/
9.10POJ1087插頭/
9.11HDU1535最小總費用/
9.12HDU1874暢通工程/
9.13HDU3572任務調度/
第10章計算幾何/
10.1LeetCode223矩形面積★★/
10.2LeetCode963最小面積矩形Ⅱ★★/
10.3LeetCode149直線上最多的點數★★★/
10.4POJ1269線段交點/
10.5POJ2653撿棍子/
10.6POJ2318玩具/
10.7POJ1696太空螞蟻/
10.8POJ2187選美比賽/
10.9HDU1115抬起石頭/
10.10HDU4643GSM/
10.11HDU1348墻/
10.12HDU5721宮殿/
10.13HDU3007導彈/
附錄A在線編程實驗報告示例/