← 竞赛体系
COURSE · 课程路径
GESP 7级
CURRICULUM
课程大纲 · 能力地图
按「大类 → 难度 → 前后顺序」组织,共 269 个能力标签。 其中 60 个为相对「GESP 6级」新增,其余为前置级别已覆盖; 同一大类内循序渐进,绿色为已备教案、可直接进入学习;灰色为编写中。
新增 标记表示该知识点是「GESP 6级」基础上本级别新加入的,需重点学习。
仅展示相对「GESP 6级」新增的内容 (60)关闭可查看完整大纲(含前置级别已覆盖的知识点)
双指针与滑动窗口
5 个标签 · 5 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 173 | 双指针求区间新增07-A2-1 | 掌握同向双指针(尺取法):用左右指针维护一个区间,根据条件移动右/左指针,高效求出满足某约束的区间。 | |
| 174 | 双指针求和新增07-A2-2 | 掌握对有序数组用双指针求“和为定值”的组合:两数之和直接左右夹逼,三数之和排序后枚举首元素再双指针。 | |
| 175 | 滑动窗口新增07-A2-3 | 掌握滑动窗口技巧:在数组/字符串上维护一个随指针滑动的窗口,用哈希或计数实时更新窗口内统计量(和、最值、种类数)。 | |
| 176 | 最长满足条件区间新增07-A2-4 | 用可变滑动窗口求“最长满足某约束的区间”,如最多含 k 个不同字符、或子数组和≤K,掌握“超界即收缩”的模板。 | |
| 177 | 最短满足条件区间新增07-A2-5 | 用可变窗口求“最短覆盖某条件的区间”,如包含全部目标字符、或子数组和≥S,掌握“满足条件才尝试收缩”。 |
搜索
10 个标签 · 10 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 231 | 连通块新增10DFS-A2-1 | 用 DFS 在无向/有向图上求连通分量个数与每个块包含的节点,理解“从每个未访问点出发能到达的全部点”构成一个分量。 | |
| 232 | 全排列新增10DFS-A2-2 | 掌握含重复元素的全排列:排序后用“同一层相同值只用一次”的剪枝避免重复排列,理解回溯中“层内去重”。 | |
| 233 | 组合新增10DFS-A2-3 | 用回溯枚举从 n 个元素中选 k 个的所有组合,理解“按位置升序选”以避免重复并自然去重。 | |
| 234 | 子集新增10DFS-A2-4 | 在子集枚举基础上加入约束(如子集和等于目标、或大小限制),掌握“选/不选 + 剪枝”的回溯框架。 | |
| 235 | 回溯新增10DFS-A2-5 | 归纳回溯的通用范式:做选择→递归→撤销选择;并掌握两类剪枝——可行性剪枝与最优性剪枝,用以削减搜索树。 | |
| 236 | 状态搜索新增10DFS-A2-6 | 把“状态”当作节点进行 DFS/回溯搜索:状态含当前位置、已收集物等;通过 visited 记录已搜状态避免重复与环。 | |
| 252 | 多源 BFS新增10BFS-A2-1 | 掌握多源 BFS:把所有起点同时入队(距离 0),一次遍历即求每个点到最近起点的距离,常用于“最近设施”“地图扩散”。 | |
| 253 | 分层 BFS新增10BFS-A2-2 | 掌握分层 BFS:用“每层结束标记”或“按层循环”依次处理同一距离的所有节点,便于层序遍历与按层统计。 | |
| 254 | 状态 BFS新增10BFS-A2-3 | 把“状态”作为 BFS 节点求最短步数(边权为 1):状态=(位置,朝向/钥匙/已访问集合),用 visited 去重保证首次到达即最短。 | |
| 255 | BFS + 状态新增10BFS-A2-4 | 掌握双向 BFS:从起点与终点同时扩展,相遇时停止,可指数级减少搜索量;适用于状态空间大但路径深的场景。 |
链表
4 个标签 · 4 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 287 | 插入删除新增12-A2-1 | 掌握单链表在指定位置/按值插入与删除节点的指针操作:插入要“先连后断”防止断链,删除要记得释放/跳过。 | |
| 288 | 链表反转新增12-A2-2 | 掌握单链表反转的迭代与递归两种写法:迭代用三指针(prev/cur/next)逐个翻转指向,递归从尾部回溯翻转。 | |
| 289 | 快慢指针新增12-A2-3 | 掌握快慢指针(龟兔赛跑):快指针走两步、慢指针走一步,可判环、求中点、找倒数第 k 个节点。 | |
| 290 | 链表合并新增12-A2-4 | 掌握合并两个升序链表:用 dummy 哨兵节点,比较两链表头节点值,小的接上并后移,最后接剩余。 |
堆与优先队列
4 个标签 · 4 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 348 | 堆排序思想新增15-A2-1 | 掌握二叉堆(优先队列):Python 用 heapq(默认最小堆),C++ 用 priority_queue;理解 push/pop/top 与“取最小/最大”的语义。 | |
| 349 | Top K新增15-A2-2 | 理解堆排序:先建堆(heapify),再反复取堆顶与末尾交换并下沉,得到升序序列;理解原地排序与 O(n log n)。 | |
| 350 | 动态最大/最小值新增15-A2-3 | 用堆在 O(n log k) 求第 k 大/小元素:维护一个大小为 k 的堆,或基于快速选择;理解堆法比全排序更省。 | |
| 351 | 贪心 + 堆新增15-A2-4 | 掌握用堆合并多个有序序列(如 K 个有序链表、数据流 TopK 汇总),理解“每个序列一个指针 + 最小堆选最小”的模式。 |
图论
14 个标签 · 14 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 395 | 图的定义新增18图基础-A1-1 | 掌握图的两种存储:邻接表(vector<vector<int>>,省空间、遍历快)与邻接矩阵(二维数组,查边 O(1) 但费空间);按稠密/稀疏选结构。 | |
| 396 | 点新增18图基础-A1-2 | 掌握在一般图上做 DFS/BFS 遍历:用 visited 数组防止重复访问(图可能成环),得到从某点出发能到达的所有节点与遍历序。 | |
| 397 | 边新增18图基础-A1-3 | 掌握拓扑排序:对有向无环图(DAG)排出顶点顺序,使每条边 u→v 中 u 在 v 前;用 Kahn 算法(入度队列)或 DFS 后序。 | |
| 398 | 度新增18图基础-A1-4 | 掌握 Dijkstra:在非负权图上求单源最短路,用最小堆每次取距离最小的点松弛其邻边;复杂度 O((V+E) log V)。 | |
| 399 | 有向图新增18图基础-A1-5 | 掌握可处理负权的单源最短路:Bellman-Ford 对所有边松弛 V-1 轮;SPFA 用队列优化,并在入队次数≥V 时判定负环。 | |
| 400 | 无向图新增18图基础-A1-6 | 掌握 Kruskal 求最小生成树:把所有边按权升序,用并查集依次加入不形成环的边,直到选够 V-1 条。 | |
| 401 | 邻接矩阵新增18图基础-A1-7 | 掌握 Prim 求最小生成树:从一点出发,用最小堆不断把“未访问点中离已选集合最近的边”对应的点加入集合,直到覆盖所有点。 | |
| 402 | 邻接表新增18图基础-A1-8 | 掌握并查集:find(路径压缩)与 union(按秩/大小合并),用于动态连通性、Kruskal、集合计数;近乎 O(1) 每操作。 | |
| 403 | 图 DFS新增18图基础-A2-1 | 掌握二分图判定:用两种颜色对图染色,相邻点异色;DFS/BFS 染色时若遇同色相邻则非二分图。 | |
| 404 | 图 BFS新增18图基础-A2-2 | 掌握欧拉路判定:无向图中每个点度数均为偶则有欧拉回路;恰两个奇度点则有欧拉路(起自奇度点);用 Hierholzer 输出路径。 | |
| 405 | 连通分量新增18图基础-A2-3 | 掌握求树(或无权图)直径:两次 BFS/DFS——任选点求最远点 u,再从 u 求最远点 v,u 到 v 距离即直径。 | |
| 406 | Flood Fill新增18图基础-A2-4 | 掌握倍增法求 LCA:预处理每个点向上 2^k 步的祖先 up[u][k],查询时先把两点提到同一深度,再同步上跳找分叉点上方。 | |
| 407 | 路径新增18图基础-A2-5 | 掌握负环检测:在 SPFA/Bellman-Ford 中,若某点被松弛(入队)次数达到 n 次以上,说明存在可无限缩短的负权环。 | |
| 408 | 环新增18图基础-A2-6 | 掌握在 Dijkstra/BFS 过程中统计最短路径条数:当找到更短路径时刷新条数,当找到等长路径时累加条数(取模)。 |
动态规划
12 个标签 · 12 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 472 | 01背包新增22DP基础-A3-1 | 掌握两类经典线性 DP:最长递增子序列(LIS,O(n log n))与最长公共子序列(LCS,O(nm)),理解状态定义与转移。 | |
| 473 | 完全背包新增22DP基础-A3-2 | 掌握多重背包的两种优化:二进制拆分将数量拆成 2 的幂转化为 0/1 背包;单调队列优化做到 O(nV)。 | |
| 474 | 多重背包新增22DP基础-A3-3 | 掌握在树上做 DP:选/不选类(最大独立集)、树上背包(子树合并),用 DFS 后序在子树状态上转移。 | |
| 475 | 分组背包新增22DP基础-A3-4 | 掌握区间 DP:状态 dp[l][r] 表示子区间 [l,r] 的最优值,长度从小到大枚举,由短区间合并成长区间。 | |
| 476 | LIS新增22DP基础-A3-5 | 掌握状压 DP:当状态维度小(如 n≤12)时,用二进制整数表示每一行/列的状态,逐行转移并保证行间约束合法。 | |
| 477 | LCS新增22DP基础-A3-6 | 掌握数位 DP:统计满足数位约束(如不含 4、数字和、特定子串)的整数个数,按位从高到低记忆化搜索,用 up 限制上界。 | |
| 478 | 区间 DP新增22DP基础-A3-7 | 掌握概率/期望 DP:以状态为随机变量,用 E = Σ p·v 或全期望公式递推期望;注意循环转移时的移项求解。 | |
| 479 | 状态压缩 DP新增22DP基础-A3-8 | 掌握用状压 DP 解旅行商 TSP:dp[mask][i] 表示已访问集合 mask 且当前在城市 i 的最小代价,枚举下一未访问城市转移。 | |
| 480 | 树形 DP新增22DP基础-A3-9 | 掌握用单调队列优化形如 dp[i]=min_{j}(dp[j]+f(i,j)) 的 DP:当 f 可拆成只关于 i 与只关于 j 的部分时,用滑动窗口维护最优 j。 | |
| 481 | DAG DP新增22DP基础-A3-10 | 掌握博弈类 DP/递推:用 win[i] 表示面对局面 i 是否必胜(存在一步到必败态即可胜),常用于 Nim 及组合游戏规则分析。 | |
| 482 | 计数 DP新增22DP基础-A3-11 | 掌握字符串类 DP:编辑距离(插入/删除/替换的最小操作数)与最长回文子序列,理解二维 DP 在字符串上的转移。 | |
| 483 | 概率 DP新增22DP基础-A3-12 | 掌握 DP 的通用建模思路:明确状态、转移、边界与答案位置;并能把复杂问题拆成上述经典 DP 的组合或变形。 |
哈希
8 个标签 · 8 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 600 | 哈希表概念新增28-A1-1 | 理解哈希表:通过哈希函数把键映射到桶;不同键映射到同桶即冲突,介绍链地址法与开放寻址法两种解决思路。 | |
| 601 | set新增28-A1-2 | 对比哈希冲突的两种解法:链地址法(桶挂链表,删除方便)与开放寻址法(线性/二次/双重探测,缓存友好但易聚集)。 | |
| 602 | map新增28-A1-3 | 掌握字符串滚动哈希:把字符串视作 P 进制数模大素数,配合前缀哈希可在 O(1) 比较任意子串是否相等,用于 Rabin-Karp 与字符串判重。 | |
| 603 | unordered_map新增28-A2-1 | 理解哈希函数的设计目标(均匀、稳定、快速)与常见方法:除留余数、乘法哈希、以及字符串/结构的组合哈希;介绍位扰动减少低位聚集。 | |
| 604 | unordered_set新增28-A2-2 | 掌握双哈希(用两个独立哈希函数降低冲突/碰撞)与布隆过滤器(多个哈希位构成的位数组,支持高效近似“可能存在/一定不存在”)。 | |
| 605 | 计数哈希新增28-A2-3 | 掌握 Rabin-Karp:对模式串与文本每个长度为 m 的窗口计算滚动哈希,哈希相等再逐字符确认,从而在平均 O(n) 完成多模式/子串匹配。 | |
| 606 | 去重新增28-A2-4 | 理解一致性哈希:把节点与键都哈希到同一个圆环上,键沿顺时针找最近节点;引入虚拟节点使负载均衡,常用于分布式缓存扩容。 | |
| 607 | 哈希映射新增28-A2-5 | 综合运用哈希:在查重、计数、缓存、字符串判等、集合判同等场景中正确选择哈希结构,并理解其时间/空间权衡与碰撞应对。 |
区间与离线算法
3 个标签 · 3 已就绪| 序号 | 知识点 | 能力目标 | 操作 |
|---|---|---|---|
| 628 | 区间概念新增30-A1-1 | 掌握一维/二维前缀和(O(1) 求区间和)与差分(O(1) 区间加),理解“前缀预处理 + 相减”与“差分数组还原”的互逆技巧。 | |
| 629 | 区间求和新增30-A1-2 | 理解离线思想:先把所有询问/事件收集,按某种顺序(如坐标、时间)统一处理,常比逐个在线处理更高效。以扫描线求矩形并面积、区间计数引入。 | |
| 630 | 区间最值新增30-A1-3 | 综合区间类问题:区分“多查询少更新”(前缀和)、“多更新少查询”(差分)、“在线动态”(树状数组/线段树),并能离线处理复杂区间统计。 |
