周赛包含大量算法套路题,我从下半年的 场周赛,共计 道题目中,整理了一些「能学到技巧」的题目,供各位练习。
每道题目我都写了题解,以及对应的视频讲解,可以在每道题的题解区看到。
我把周赛题目分为以下七类:
模拟指按照题目要求实现相应代码,一般暴力即可通过。
某些模拟题会有点复杂,这也能很好地锻炼实现代码的能力。
注 1:常见于周赛第一题(约占 )、第二题(约占 )和第三题(约占 )。
注 2:表格已按照难度排序(下同)。
| 题目 | 难度 |
|---|---|
| 2437. 有效时间的数目 | 1427 |
| 2349. 设计数字容器系统 | 1540 |
| 2456. 最流行的视频创作者 | 1548 |
| 2409. 统计共同度过的日子数 | 1562 |
| 2512. 奖励最顶尖的 K 名学生 | 1636 |
| 2502. 设计内存分配器 | 1746 |
| 2353. 设计食物评分系统 | 1782 |
技巧指一些比较套路的算法,包括双指针、滑动窗口、二分(主要指二分答案)、前缀和、差分、前后缀分解、位运算、二进制枚举、贡献法等。这些技巧相对容易掌握,想在周赛上分的同学可以优先学习这些内容。
顺带一提,我一般把窗口大小不固定的叫做双指针,窗口大小固定的叫做滑动窗口。
为了不剧透,这些题目我就不分类了,而是写在备注中。
注:常见于周赛第二题(约占 )和第三题(约占 )。
| 题目 | 难度 | 备注 |
|---|---|---|
| 2483. 商店的最少代价 | 1495 | 前后缀分解 |
| 2461. 长度为 K 子数组中的最大和 | 1553 | 非常标准的滑动窗口题 |
| 2425. 所有数对的异或和 | 1622 | 贡献法 |
| 2420. 找到所有好下标 | 1695 | 前后缀分解 |
| 2397. 被列覆盖的最多行数 | 1719 | 二进制枚举 |
| 2401. 最长优雅子数组 | 1750 | 位运算与双指针结合的好题(暴力也可以过) |
| 2381. 字母移位 II | 1793 | 差分 |
| 2516. 每种字符至少取 K 个 | 1947 | 绝大多数双指针题目都是算子数组/子串,而这题是算的前缀+后缀,如此变形后要怎么做呢? |
| 2439. 最小化数组中的最大值 | 1965 | 二分答案之最小化最大值(看到最小和最大就要往二分答案上想) |
| 2517. 礼盒的最大甜蜜度 | 2020 | 二分答案 |
| 2444. 统计定界子数组的数目 | 2093 | 较为复杂的多指针题目,你能写出简洁的代码吗? |
周赛常客。
如果你很难想出状态转移方程,以及递推的顺序,可以先从记忆化搜索开始思考,然后转换到递推上。具体请看 动态规划入门:从记忆化搜索到递推【基础算法精讲 17】。
记忆化搜索像是自动挡,无需思考递推顺序,边界条件也容易确认;而递推像是手动挡,需要仔细确认递推的顺序以及初始值。但记忆化搜索并不是万能的,某些题目递推的写法可以结合数据结构等来优化时间复杂度。
注:常见于周赛第四题(约占 ),偶见于第三题(约占 )。
| 题目 | 难度 | 备注 |
|---|---|---|
| 2466. 统计构造好字符串的方案数 | 1694 | 本质上是 70. 爬楼梯 |
| 2400. 恰好移动 k 步到达某一位置的方法数目 | 1751 | 也有数学解 |
| 2369. 检查数组是否存在有效划分 | 1780 | |
| 2370. 最长理想子序列 | 1835 | |
| 2327. 知道秘密的人数 | 1894 | |
| 2435. 矩阵中和能被 K 整除的路径 | 1952 | |
| 2328. 网格图中递增路径的数目 | 2001 | |
| 2472. 不重叠回文子字符串的最大数目 | 2013 | 中心扩展法 |
| 2430. 对字母串可执行的最大删除数 | 2102 | |
| 2376. 统计特殊整数 | 2120 | 数位 DP,这类题目非常套路,掌握模板后就可以随便秒了 |
| 2407. 最长递增子序列 II | 2280 | 线段树优化 DP |
| 2458. 移除子树后的二叉树高度 | 2299 | 树形 DP |
| 2478. 完美分割的方案数 | 2344 | |
| 2518. 好分区的数目 | 2414 | 01 背包,需要一些思维转换 |
| 2463. 最小移动总距离 | 2454 |
包括堆(优先队列)、单调栈、单调队列、字典树、并查集、树状数组、线段树等。
学习这些只是开始,能否灵活运用才是关键。
注:常见于周赛第四题(约占 )。
| 题目 | 难度 | 备注 |
|---|---|---|
| 2416. 字符串的前缀分数和 | 1725 | 字典树 |
| 2462. 雇佣 K 位工人的总代价 | 1764 | 最小堆 |
| 2398. 预算内的最多机器人数目 | 1917 | 双指针+单调队列 |
| 2426. 满足不等式的数对数目 | 2030 | 式子变形+逆序对模型+树状数组 |
| 2402. 会议室 III | 2093 | 最小堆 |
| 2382. 删除操作后的最大子段和 | 2136 | 并查集 |
| 2454. 下一个更大元素 IV | 2175 | 单调栈 |
| 2503. 矩阵查询可获得的最大分数 | 2196 | 离线询问+并查集/最小堆 |
| 2334. 元素值大于变化阈值的子数组 | 2381 | 并查集/单调栈 |
| 2421. 好路径的数目 | 2445 | 并查集 |
周赛中的图论题目比较少,除了下面选的 DFS、BFS、拓扑排序、基环树、二分图判定等,还有最短路、DFS 时间戳等(这些可以在上半年的周赛题目中学到)。
注:偶见于周赛第三题(约占 )和第四题(约占 )。
| 题目 | 难度 | 备注 |
|---|---|---|
| 2368. 受限条件下可到达节点的数目 | 1477 | DFS/BFS 典型题 |
| 2385. 感染二叉树需要的总时间 | 1711 | DFS+BFS |
| 2359. 找到离给定两个节点最近的节点 | 1715 | |
| 2360. 图中的最长环 | 1897 | 内向基环树+时间戳技巧 |
| 2509. 查询树中环的长度 | 1948 | 最近公共祖先 |
| 2392. 给定条件下构造矩阵 | 1961 | 拓扑排序 |
| 2467. 树上最大得分和路径 | 2053 | |
| 2493. 将节点分成尽可能多的组 | 2415 | 二分图判定(可选)+BFS |
主要考察的是数论(质数、GCD、LCM、逆元等)和组合数学。
注:占比很少,不足 。
| 题目 | 难度 | 备注 |
|---|---|---|
| 2507. 使用质因数之和替换后可以取到的最小值 | 1500 | 质因数分解 |
| 2470. 最小公倍数为 K 的子数组数目 | 1560 | LCM |
| 2447. 最大公因数等于 K 的子数组数目 | 1603 | GCD |
| 2344. 使数组可以被整除的最少删除次数 | 1641 | GCD |
| 2453. 摧毁一系列目标 | 1762 | 同余 |
| 2514. 统计同位异构字符串数目 | 2069 | 组合数学+逆元 |
| 2513. 最小化两个数组中的最大值 | 2302 | 二分答案+LCM+容斥 |
| 2338. 统计理想数组的数目 | 2615 | 质因数分解+放球问题 |
包含贪心、脑筋急转弯等,挑选一些比较有趣的题目。
注:常见于周赛第二题(约占 )、第三题(约占 )和第四题(约占 )。
| 题目 | 难度 | 备注 |
|---|---|---|
| 2383. 赢得比赛需要的最少训练时长 | 1413 | 上帝视角下的贪心 |
| 2419. 按位与最大的最长子数组 | 1496 | 脑筋急转弯 |
| 2337. 移动片段得到字符串 | 1693 | 脑筋急转弯 |
| 2498. 青蛙过河 II | 1759 | |
| 2332. 坐上公交的最晚时间 | 1841 | 脑筋急转弯 |
| 2350. 不可能得到的最短骰子序列 | 1961 | |
| 2488. 统计中位数为 K 的子数组 | 1999 | 等价转换 |
| 2448. 使数组相等的最小开销 | 2005 | 转换成中位数贪心 |
| 2412. 完成所有交易的初始最少钱数 | 2092 | |
| 2499. 让数组不相等的最小总代价 | 2633 | |
| 2386. 找出数组的第 K 大和 | 2648 |
欢迎点赞我在B站讲算法,欢迎大家关注 B站@灵茶山艾府