jeffzc24-cmyk / algorithm-practice-roadmap
git clone https://github.com/jeffzc24-cmyk/algorithm-practice-roadmap.git
算法入门刷题规划:236 道题,覆盖 LeetCode、AtCoder、洛谷与 Codeforces;含章节题单、学习资料和离线交互网页。
+0
stars, 24h · #31,881
+~0
stars, 7 days · #32,356
+101
stars, 30 days · #4,858
94
★ total
0
forks · 0 open issues
Star history (as recorded here)
LanguageHTML
LicenseMIT
Created2026-09-27 (25d ago)
Last push25d ago
Watchers0
OwnerUser
GitHub topics
Links
- GitHub: github.com/jeffzc24-cmyk/algorithm-practice-roadmap
- Releases · Issues · Hacker News mentions
README excerpt
# 算法入门刷题规划 从基础题型,到完整程序,再到入门竞赛。 **236 道题 · 4 个平台 · 3 条路线** 开始使用 · 完整题单 · 整场练习 · 资料与维护 一份按知识点和章节组织的算法入门题单。保留题目、学习资料与题解的外部链接,并提供可离线使用的交互网页。 | 路线 | 章节 | 题量 | 练习重点 | | :--- | :---: | ---: | :--- | | LeetCode 算法主线 | 18 | 160 | 常见模型、数据结构与解题方法 | | AtCoder · 洛谷 | 12 | 80 | 完整程序、输入输出与综合应用 | | Codeforces 入门 | 3 | 18 | 读题、观察、构造与基础竞赛题 | > 共 236 道不同题目:138 道 LeetCode、40 道 AtCoder、40 道洛谷、18 道 Codeforces。22 道题跨路线共享,完成一次即可。 ## 开始使用 **阅读题单:** 在下方选择路线,展开章节。每章包含学习目标、C++ 工具、阅读入口、题目和过关标准。 **交互网页:** 下载仓库后,在浏览器中打开 index.html。支持章节切换、搜索、状态筛选、复盘笔记及进度导入导出,无需安装依赖。 网页不内置完成记录,进度只保存在当前浏览器中,不上传到仓库或服务器。换浏览器或设备前,可导出进度后再导入;导出的文件可能包含自己的笔记,请自行保存。 ### 如何选择路线 - **准备系统练习算法:** 从算法主线开始,按章节理解模型与实现。 - **需要练完整程序:** 从 AtCoder · 洛谷第 1 章开始,补齐输入输出、多组测试和边界调试。 - **准备接触竞赛:** 能独立完成完整程序和简单题后,进入 Codeforces 入门;专题练习与整场训练可以穿插进行。 | 标记 | 建议做法 | | :--- | :--- | | 快练 | 独立实现,确认基本操作与边界 | | 精做 / 主练 | 解释关键思路、正确性、时间与空间复杂度 | | 选做 | 根据知识缺口选择,入门阶段可后置 | | 共享题 | 两条路线使用同一道题,网页同步状态与笔记 | 先独立尝试,再按需要阅读提示和题解。提示后完成的题,可间隔其他练习后闭卷复测。通过评测是反馈之一,能解释并独立实现才是学习目标。 C++ 起步与使用说明 · 章节复盘模板 ## 完整题单 ### LeetCode 算法主线 按专题建立算法与数据结构的知识体系,包含 138 道 LeetCode 与 22 道完整程序练习。 | 章节 | 内容 | 题量 | | :---: | :--- | ---: | | 01 | 模拟、数组与枚举 | 11 | | 02 | 哈希与计数 | 8 | | 03 | 双指针与滑动窗口 | 8 | | 04 | 前缀和与差分 | 6 | | 05 | 二分查找与二分答案 | 11 | | 06 | 链表与指针 | 9 | | 07 | 栈、堆与单调结构 | 11 | | 08 | 排序、分治与贪心 | 10 | | 09 | 位运算与基础数学 | 9 | | 10 | 树、递归与子问题返回值 | 15 | | 11 | 图遍历、BFS 与拓扑排序 | 10 | | 12 | 搜索、回溯与剪枝 | 10 | | 13 | 并查集、最短路与最小生成树 | 8 | | 14 | 基础动态规划 | 11 | | 15 | 背包、计数与状态设计 | 9 | | 16 | 子序列、区间与树形 DP | 7 | | 17 | KMP 与字典树 | 3 | | 18 | 树状数组与线段树 | 4 | 01 · 模拟、数组与枚举 · 11 题 **学习目标:** 根据文字规则实现程序,并从约束缩小枚举范围。 **C++ 工具:** vector、string、引用、size 与 reserve、标准输入输出。 **阅读入口** - **进入本章:** 数组理论基础。只复查连续存储、下标、插入删除;已能解释的部分直接略过。 - **做 ABC083B 前:** OI Wiki:枚举 · 官网。只看枚举的要点:解空间、枚举范围、减少自由变量;先不看例题代码。 | # | 题目 | 投入 | 训练重点 | 参考 | | ---: | :--- | :--- | :--- | :--- | | 001 | PracticeA · Welcome to AtCoder | 快练 · 共享 | 标准输入输出与精确输出格式;不使用 LeetCode 的 Solution 模板。 | 对应方法 · 备用 | | 002 | LC 27 · 移除元素 | 精做 | 快慢指针维护有效前缀,区分返回长度与修改原数组。 | 题解 | | 003 | LC 283 · 移动零 | 快练 | 保持非零元素的相对顺序,比较交换与覆盖。 | 题解 | | 004 | LC 26 · 删除有序数组中的重复项 | 快练 | 有序性怎样帮助去重;写指针代表什么。 | 题解 | | 005 | LC 977 · 有序数组的平方 | 精做 | 利用两端绝对值,从结果数组末尾填入。 | 题解 | | 006 | LC 344 · 反转字符串 | 快练 | 左右指针与奇偶长度边界。 | 题解 | | 007 | LC 59 · 螺旋矩阵 II | 精做 | 逐层填数,写清每条边的开闭范围。 | 题解 · 备用 | | 008 | LC 54 · 螺旋矩阵 | 精做 | 从生成矩阵迁移到遍历矩阵;单行、单列不能重复访问。 | 题解 · 备用 | | 009 | ABC083B · Some Sums | 精做 · 共享 | 枚举整数并拆数位,明确取模与整除各自的作用。 | 对应方法 · 备用 | | 010 | ABC085C · Otoshidama | 精做 · 共享 | 用数量约束消去一个变量,检验无解与零张数。 | 对应方法 · 备用 | | 011 | ABC086C · Traveling | 精做 · 共享 | 由曼哈顿距离与奇偶性推导可达条件,避免逐步模拟时间。 | 对应方法 · 备用 | **过关标准:** 能独立写标准输入输出程序;解释有效数组前缀;把三重枚举降成两重,并算清操作次数。 02 · 哈希与计数 · 8 题 **学习目标:** 从逐对比较转为记录信息;区分频次数组、集合、映射的用途。 **C++ 工具:** unordered_map、unordered_set、find、count、pair;哈希平均成本与最坏成本不同。 **阅读入口** - **进入本章:** 哈希表理论基础。看数组、set、map 各适合记录什么;只读 C++,暂不深挖哈希表源码。 | # | 题目 | 投入 | 训练重点 | 参考 | | ---: | :--- | :--- | :--- | :--- | | 012 | LC 242 · 有效的字母异位词 | 快练 | 字符频次,使用 26 个槽位前先确认字符范围。 | 题解 | | 013 | LC 383 · 赎金信 | 快练 | 从频