iT邦幫忙

鐵人檔案

2025 iThome 鐵人賽
回列表
Software Development

學習C++必備!30 天演算法入門到進階 + CSES 與 Leetcode 實戰 系列

本系列將以 C++ 為主要開發語言,結合演算法理論、STL、以及兩大經典題庫 CSES Problem Set 與 LeetCode 進行實戰演練。
內容安排由淺入深:
第一週:STL、排序、雜湊、前綴和等基礎演算法
第二週:雙指標、貪心、搜尋、BFS/DFS
第三週:動態規劃 (DP) 系列專題
第四週:圖論進階、字串演算法與綜合實戰
每天將透過理論解析 → C++ 實作 → 題目演練的方式,幫助讀者一步步掌握演算法核心思維,並透過實戰提升解題能力。

參賽天數 30 天 | 共 30 篇文章 | 0 人訂閱 訂閱系列文 RSS系列文
DAY 21

Day 21 — DP 綜合挑戰

一、學習目標 把不同型態的 DP(計數型、最佳化型、線性 DP、環狀 DP、字串 DP)串起來。 熟練「狀態定義 → 轉移 → 初始條件 → 答案位置」的完整...

2025-09-13 ‧ 由 lichengen 分享
DAY 22

Day 22 — Dijkstra(單源最短路徑,非負權)

一、學習目標 正確判斷 Dijkstra 的適用條件:邊權 ≥ 0。 熟練最小堆(priority_queue with greater) 的寫法與「鬆弛(r...

2025-09-14 ‧ 由 lichengen 分享
DAY 23

Day 23:Floyd–Warshall 全源最短路徑

一、學習目標 了解 Floyd–Warshall 的狀態定義與三重迴圈轉移,正確處理多重邊與自環。 學會在有多組查詢時,用 APSP(All-Pairs Sh...

2025-09-15 ‧ 由 lichengen 分享
DAY 24

Day 24:Kruskal + Union-Find

一、學習目標 熟悉 Union-Find(Disjoint Set Union, DSU):路徑壓縮 + 按大小/秩合併。 會用 Kruskal 建立 最小生...

2025-09-16 ‧ 由 lichengen 分享
DAY 25

Day 25:拓撲排序(Kahn’s Algorithm)

一、學習目標 了解拓撲排序的兩種常見實作:Kahn’s Algorithm(BFS/入度法) 與 DFS 反向後序。 能用拓撲序判斷是否為 DAG(有無有向環...

2025-09-17 ‧ 由 lichengen 分享
DAY 26

Day 26:KMP 演算法(高效子字串搜尋)

一、學習目標 了解 Prefix Function / 失配函數(π / LPS) 的定義與線性建表 O(n)。 熟練用 KMP 做單一樣式的字串搜尋 O(n...

2025-09-18 ‧ 由 lichengen 分享
DAY 27

Day 27:Rabin–Karp + 滾動雜湊(Rolling Hash)

一、學習目標 了解多項式滾動雜湊(Polynomial Rolling Hash) 的定義、前綴雜湊與 O(1) 取子字串雜湊。 熟悉單/雙雜湊、避免碰撞的實...

2025-09-19 ‧ 由 lichengen 分享
DAY 28

Day 28:樹的基本性質與遍歷

一、學習目標 熟悉樹的基本觀念:根、深度、高度、父子關係、直徑(diameter)。 會用 DFS/BFS 在 O(n) 內處理常見樹問題(最長路徑、節點最遠...

2025-09-20 ‧ 由 lichengen 分享
DAY 29

Day 29:樹上 DP(子樹狀態遞迴、記憶化、自底向上/換根)

一、學習目標 掌握 樹上 DP 的三個典型套路: 子樹 DP(自底向上):狀態只看子樹(如最大匹配、子樹和)。 換根 DP(rerooting):先求某根的...

2025-09-21 ‧ 由 lichengen 分享
DAY 30

Day 30:LCA 與進階樹技術(Binary Lifting)

一、學習目標 會用 Binary Lifting(倍增法)在 O(logN) 內處理 k-th 祖先、LCA、兩點距離。 知道前處理要素:depth[]、up...

2025-09-22 ‧ 由 lichengen 分享