如何科学刷题
为什么要科学刷题
刷题低效,很多时候不是不够努力,而是顺序不对:题目太难,容易频繁受挫;题目太简单,又会陷入机械重复。更稳妥的做法,是让题目难度始终略高于当前水平,在“能思考、能复盘、也能持续推进”的区间里训练。
如果是算法新手,建议先完成 「新」动计划 · 编程入门,先把数组、字符串、哈希、模拟这类基础实现题过一遍,再进入系统化专题训练。
刷题前先记住这几条
- 每题先独立思考至少 15 分钟,实在没有方向,再去看题解。
- 看题解不是为了“知道答案”,而是为了提炼信号:什么特征对应什么方法,状态怎么定义,不变量是什么,边界怎么处理。
- 看懂以后一定要关掉题解,自己重新敲一遍,直到能独立复现。
- 每做完一题,最好记下一句总结:下次看到什么条件,应该优先想到什么套路。
方法 A:专题训练
专题训练适合新人建立知识体系,也适合把零散题感整理成稳定方法论。建议先按下面这条主线推进。
核心刷题路线
除动态规划外,默认优先完成难度分 ≤1700 的题目。
| 顺序 | 题单 | 建议先做 | 备注 |
|---|---|---|---|
| 0 | 编程入门 | 热身即可 | 有两道数据库题,可以先跳过 |
| 1 | 滑动窗口 | 定长滑动窗口、不定长滑动窗口 | 先建立双指针与窗口维护意识 |
| 2 | 二分算法 | 二分查找 | 二分答案可以先放后面,别一开始硬啃 |
| 3 | 数据结构 | 常用枚举技巧、前缀和、栈、队列、堆 | 这是新手最常用的工具箱 |
| 4 | 链表、树、回溯 | 二叉树 DFS | 用递归建立搜索与树形问题直觉 |
| 5 | 网格图 | 网格 DFS | 继续巩固递归与搜索 |
| 6 | 链表、树、回溯 | 回溯 | 训练搜索树建模和剪枝意识 |
| 7 | 动态规划 | 前六章 | 是入门门槛,题量不够时可把范围放宽到难度分 ≤2000 |
配套资源
- 基础算法精讲:适合在刷某个专题前先建立概念框架。
- LeetCodeRating|显示力扣周赛难度分:方便按难度推进题单,并自动标记做题进度。
题单详解
下面把题单按专题大节、小节和具体题目展开。建议优先按上面的核心路线刷,不必一次把所有题目全部做完;每完成一个专题,再回头补相关扩展题,效率通常更高。
滑动窗口与双指针
定长滑动窗口
基础
- 1456. 定长子串中元音的最大数目:练固定窗口统计与更新。
- 643. 子数组最大平均数 I:练固定窗口统计与更新。
- 1343. 大小为 K 且平均值大于等于阈值的子数组数目:练固定窗口统计与更新。
- 2090. 半径为 k 的子数组平均值:练固定窗口统计与更新。
- 2379. 得到 K 个黑块的最少涂色次数:练固定窗口统计与更新。
- 2841. 几乎唯一子数组的最大和:练固定窗口统计与更新。
- 2461. 长度为 K 子数组中的最大和:练固定窗口统计与更新。
- 1423. 可获得的最大点数:练固定窗口统计与更新。
- 1176. 健身计划评估:练固定窗口统计与更新,会员题。
- 1100. 长度为 K 的无重复字符子串:练固定窗口统计与更新,会员题。
- 1852. 每个子数组的数字种类数:练固定窗口统计与更新,会员题。
- 1151. 最少交换次数来组合所有的 1:练固定窗口统计与更新,会员题。
- 2107. 分享 K 个糖果后独特口味的数量:练固定窗口统计与更新,会员题。
进阶(选做)
- 3679. 使库存平衡的最少丢弃次数:练固定窗口统计与更新。
- 1052. 爱生气的书店老板:练固定窗口统计与更新。
- 3439. 重新安排会议得到最多空余时间 I:练固定窗口统计与更新。
- 3694. 删除子字符串后不同的终点:练固定窗口统计与更新。
- 2134. 最少交换次数来组合所有的 1 II:练固定窗口统计与更新。
- 1652. 拆炸弹:练固定窗口统计与更新;做到 O(n)。
- 1297. 子串的最大出现次数:练固定窗口统计与更新。
- 3652. 按策略买卖股票的最佳时机:练固定窗口统计与更新。
- 1888. 使二进制字符串字符交替的最少反转次数:练固定窗口统计与更新。
- 567. 字符串的排列:练固定窗口统计与更新。
- 438. 找到字符串中所有字母异位词:练固定窗口统计与更新。
- 30. 串联所有单词的子串:练固定窗口统计与更新。
- 2156. 查找给定哈希值的子串:练固定窗口统计与更新。
- 2953. 统计完全子字符串:练固定窗口统计与更新。
- 1016. 子串能表示从 1 到 N 数字的二进制串:练固定窗口统计与更新;做到 O(∣s∣)。
- 3672. 子数组中加权众数的总和:练固定窗口统计与更新,会员题。
- 2067. 等计数子串的数量:练固定窗口统计与更新,会员题。
- 2524. 子数组的最大频率分数:练固定窗口统计与更新,会员题。
其他(选做)
- 2200. 找出数组中的所有 K 近邻下标:练固定窗口统计与更新;做法不止一种。
- 2269. 找到一个数字的 K 美丽值:练固定窗口统计与更新。
- 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串:练固定窗口统计与更新。
- 220. 存在重复元素 III:练固定窗口统计与更新。
- 2653. 滑动子数组的美丽值:练固定窗口统计与更新。
不定长滑动窗口
越短越合法/求最长/最大
基础
- 3. 无重复字符的最长子串:练窗口扩缩与合法性维护。
- 3090. 每个字符最多出现两次的最长子字符串:练窗口扩缩与合法性维护。
- 1493. 删掉一个元素以后全为 1 的最长子数组:练窗口扩缩与合法性维护。
- 3634. 使数组平衡的最少移除数目:练窗口扩缩与合法性维护。
- 1208. 尽可能使字符串相等:练窗口扩缩与合法性维护。
- 904. 水果成篮:练窗口扩缩与合法性维护。
- 1695. 删除子数组的最大得分:练窗口扩缩与合法性维护。
- 2958. 最多 K 个重复元素的最长子数组:练窗口扩缩与合法性维护。
- 2024. 考试的最大困扰度:练窗口扩缩与合法性维护。
- 1004. 最大连续 1 的个数 III:练窗口扩缩与合法性维护。
- 3641. 最长半重复子数组:练窗口扩缩与合法性维护,会员题。
进阶(选做)
- 2730. 找到最长的半重复子字符串:练窗口扩缩与合法性维护;非暴力做法。
- 2779. 数组的最大美丽值:练窗口扩缩与合法性维护。
- 1658. 将 x 减到 0 的最小操作数:练窗口扩缩与合法性维护。
- 1838. 最高频元素的频数:练窗口扩缩与合法性维护。
- 2516. 每种字符至少取 K 个:练窗口扩缩与合法性维护。
- 2831. 找出最长等值子数组:练窗口扩缩与合法性维护。
- 2271. 毯子覆盖的最多白色砖块数:练窗口扩缩与合法性维护。
- 2106. 摘水果:练窗口扩缩与合法性维护。
- 2555. 两个线段获得的最多奖品:练窗口扩缩与合法性维护。
- 2009. 使数组连续的最少操作数:练窗口扩缩与合法性维护。
- 1610. 可见点的最大数目:练窗口扩缩与合法性维护。
- 2781. 最长合法子字符串的长度:练窗口扩缩与合法性维护。
- 3411. 最长乘积等价子数组:练窗口扩缩与合法性维护;非暴力做法约 2300。
- 3413. 收集连续 K 个袋子可以获得的最多硬币数量:练窗口扩缩与合法性维护。
- 395. 至少有 K 个重复字符的最长子串:练窗口扩缩与合法性维护。
- 1763. 最长的美好子字符串:练窗口扩缩与合法性维护;非暴力做法。
- 2968. 执行操作使频率分数最大:练窗口扩缩与合法性维护。
- 1040. 移动石子直到连续 II:练窗口扩缩与合法性维护。
- 487. 最大连续 1 的个数 II:练窗口扩缩与合法性维护,会员题。
- 159. 至多包含两个不同字符的最长子串:练窗口扩缩与合法性维护,会员题。
- 340. 至多包含 K 个不同字符的最长子串:练窗口扩缩与合法性维护,会员题。
越长越合法/求最短/最小
- 209. 长度最小的子数组:练窗口扩缩与合法性维护。
- 3795. 不同元素和至少为 K 的最短子数组长度:练窗口扩缩与合法性维护。
- 2904. 最短且字典序最小的美丽子字符串:练窗口扩缩与合法性维护;做到 O(n2)。
- 1234. 替换子串得到平衡字符串:练窗口扩缩与合法性维护。
- 2875. 无限数组的最短子数组:练窗口扩缩与合法性维护。
- 76. 最小覆盖子串:练窗口扩缩与合法性维护。
- 632. 最小区间:练窗口扩缩与合法性维护;做法不止一种。
求子数组个数
越短越合法
- 713. 乘积小于 K 的子数组:练窗口扩缩与合法性维护。
- 3258. 统计满足 K 约束的子字符串数量 I:练窗口扩缩与合法性维护;做到 O(n)。
- 2302. 统计得分小于 K 的子数组数目:练窗口扩缩与合法性维护。
- 2762. 不间断子数组:练窗口扩缩与合法性维护。
- LCP 68. 美观的花束:练窗口扩缩与合法性维护。
- 2743. 计算没有重复字符的子字符串数量:练窗口扩缩与合法性维护,会员题。
- 3134. 找出唯一性数组的中位数:练窗口扩缩与合法性维护。
- 3261. 统计满足 K 约束的子字符串数量 II:练窗口扩缩与合法性维护。
越长越合法
- 1358. 包含所有三种字符的子字符串数目:练窗口扩缩与合法性维护。
- 2962. 统计最大元素出现至少 K 次的子数组:练窗口扩缩与合法性维护。
- 3325. 字符至少出现 K 次的子字符串 I:练窗口扩缩与合法性维护;做到 O(n)。
- 2799. 统计完全子数组的数目:练窗口扩缩与合法性维护;做到 O(n)。
- 2537. 统计好子数组的数目:练窗口扩缩与合法性维护。
- 3298. 统计重新排列后包含另一个字符串的子字符串数目 II:练窗口扩缩与合法性维护;同 76 题。
- 2495. 乘积为偶数的子数组数:练窗口扩缩与合法性维护,会员题。
恰好型滑动窗口
- 930. 和相同的二元子数组:练窗口扩缩与合法性维护。
- 1248. 统计「优美子数组」:练窗口扩缩与合法性维护。
- 3306. 元音辅音字符串计数 II:练窗口扩缩与合法性维护。
- 992. K 个不同整数的子数组:练窗口扩缩与合法性维护。
其他(选做)
- 825. 适龄的朋友:练窗口扩缩与合法性维护。
- 2401. 最长优雅子数组:练窗口扩缩与合法性维护。
- 1156. 单字符重复子串的最大长度:练窗口扩缩与合法性维护。
- 424. 替换后的最长重复字符:练窗口扩缩与合法性维护。
- 438. 找到字符串中所有字母异位词:练窗口扩缩与合法性维护。
- 1712. 将数组分成三个子数组的方案数:练窗口扩缩与合法性维护。
- LCR 180. 文件组合:练窗口扩缩与合法性维护。
- 1918. 第 K 小的子数组和:练窗口扩缩与合法性维护,会员题。
单序列双指针
反转字符串
- 344. 反转字符串:练左右指针维护区间。
- 3794. 反转字符串前缀:练左右指针维护区间。
- 2000. 反转单词前缀:练左右指针维护区间。
- 3643. 垂直翻转子矩阵:练左右指针维护区间。
- 832. 翻转图像:练左右指针维护区间。
- 3823. 反转一个字符串里的字母后反转特殊字符:练左右指针维护区间。
- 541. 反转字符串 II:练左右指针维护区间。
- 557. 反转字符串中的单词 III:练左右指针维护区间。
- 151. 反转字符串中的单词:练左右指针维护区间。
- 3775. 反转元音数相同的单词:练左右指针维护区间。
- 917. 仅仅反转字母:练左右指针维护区间。
- 345. 反转字符串中的元音字母:练左右指针维护区间。
- 186. 反转字符串中的单词 II:练左右指针维护区间,会员题。
相向双指针
- 2697. 字典序最小回文串:练左右指针维护区间。
- 125. 验证回文串:练左右指针维护区间。
- 1750. 删除字符串两端相同字符后的最短长度:练左右指针维护区间。
- 2105. 给植物浇水 II:练左右指针维护区间。
- 977. 有序数组的平方:练左右指针维护区间;做到 O(n)。
- 658. 找到 K 个最接近的元素:练左右指针维护区间。
- 1471. 数组中的 K 个最强值:练左右指针维护区间。
- 167. 两数之和 II - 输入有序数组:练左右指针维护区间。
- 633. 平方数之和:练左右指针维护区间。
- 2824. 统计和小于目标的下标对数目:练左右指针维护区间。
- 2563. 统计公平数对的数目:练左右指针维护区间。
- LCP 28. 采购方案:练左右指针维护区间;同 2824 题。
- 15. 三数之和:练左右指针维护区间。
- 16. 最接近的三数之和:练左右指针维护区间。
- 18. 四数之和:练左右指针维护区间。
- 611. 有效三角形的个数:练左右指针维护区间。
- 1577. 数的平方等于两数乘积的方法数:练左右指针维护区间。
- 923. 三数之和的多种可能:练左右指针维护区间。
- 948. 令牌放置:练左右指针维护区间。
- 11. 盛最多水的容器:练左右指针维护区间。
- 42. 接雨水:练左右指针维护区间。
- 1616. 分割两个字符串得到回文串:练左右指针维护区间。
- 1498. 满足条件的子序列数目:练左右指针维护区间。
- 1782. 统计点对的数目:练左右指针维护区间。
- 1099. 小于 K 的两数之和:练左右指针维护区间,会员题。
- 360. 有序转化数组:练左右指针维护区间,会员题。
- 2422. 使用合并操作将数组转换为回文序列:练左右指针维护区间,会员题。
- 259. 较小的三数之和:练左右指针维护区间,会员题。
- 3802. 给纸张涂色的方式数量:练左右指针维护区间,会员题。
- 3814. 预算下的最大总容量:练左右指针维护区间。
同向双指针
- 2200. 找出数组中的所有 K 近邻下标:练左右指针维护区间;做法不止一种。
- 611. 有效三角形的个数:练左右指针维护区间。
- 3649. 完美对的数目:练左右指针维护区间。
- 1574. 删除最短的子数组使剩余数组有序:练左右指针维护区间。
- 2972. 统计移除递增子数组的数目 II:练左右指针维护区间。
- 2122. 还原原数组:练左右指针维护区间。
- 2234. 花园的最大总美丽值:练左右指针维护区间。
- 1989. 捉迷藏中可捕获的最大人数:练左右指针维护区间,会员题。
- 3323. 通过插入区间最小化连通组:练左右指针维护区间,会员题。
- 581. 最短无序连续子数组:练左右指针维护区间。
- 3555. 排序每个滑动窗口中最小的子数组:练左右指针维护区间,会员题。
背向双指针
- 1793. 好子数组的最大分数:练左右指针维护区间。
- 976. 三角形的最大周长:练左右指针维护区间。
原地修改
- 27. 移除元素:练左右指针维护区间。
- 26. 删除有序数组中的重复项:练左右指针维护区间。
- 80. 删除有序数组中的重复项 II:练左右指针维护区间。
- 2273. 移除字母异位词后的结果数组:练左右指针维护区间。
- 3684. 至多 K 个不同元素的最大和:练左右指针维护区间。
- 283. 移动零:练左右指针维护区间。
- 905. 按奇偶排序数组:练左右指针维护区间。
- 922. 按奇偶排序数组 II:练左右指针维护区间。
- 3467. 将数组按照奇偶性转化:练左右指针维护区间。
- 2460. 对数组执行操作:练左右指针维护区间。
- 1089. 复写零:练左右指针维护区间。
- 75. 颜色分类:练左右指针维护区间。
- 1920. 基于排列构建数组:练左右指针维护区间。
- 442. 数组中重复的数据:练左右指针维护区间。
- 448. 找到所有数组中消失的数字:练左右指针维护区间。
- 41. 缺失的第一个正数:练左右指针维护区间。
- 2784. 检查数组是否是好的:练左右指针维护区间。
矩阵上的双指针
- 240. 搜索二维矩阵 II:练左右指针维护区间。
- 1351. 统计有序矩阵中的负数:练左右指针维护区间。
双序列双指针
双指针
- 2109. 向字符串添加空格:练双数组协同推进。
- 2540. 最小公共值:练双数组协同推进;做到 O(n+m)。
- 88. 合并两个有序数组:练双数组协同推进;做到 O(n+m)。
- 2570. 合并两个二维数组 - 求和法:练双数组协同推进;做到 O(n+m)。
- 350. 两个数组的交集 II:练双数组协同推进。
- LCP 18. 早餐组合:练双数组协同推进。
- 1855. 下标对中的最大距离:练双数组协同推进。
- 1385. 两个数组间的距离值:练双数组协同推进。
- 925. 长按键入:练双数组协同推进;做到 O(n+m)。
- 809. 情感丰富的文字:练双数组协同推进。
- 2337. 移动片段得到字符串:练双数组协同推进。
- 777. 在 LR 字符串中交换相邻字符:练双数组协同推进;同 2337 题。
- 844. 比较含退格的字符串:练双数组协同推进;做到 O(1) 额外空间。
- 986. 区间列表的交集:练双数组协同推进;做到 O(n+m)。
- 面试题 16.06. 最小差:练双数组协同推进。
- 1537. 最大得分:练双数组协同推进。
- 244. 最短单词距离 II:练双数组协同推进,会员题。
- 2838. 英雄可以获得的最大金币数:练双数组协同推进,会员题。
- 1229. 安排会议日程:练双数组协同推进,会员题。
- 1570. 两个稀疏向量的点积:练双数组协同推进,会员题。
- 1868. 两个行程编码数组的积:练双数组协同推进,会员题。
判断子序列
- 392. 判断子序列:练双数组协同推进。
- 524. 通过删除字母匹配到字典里最长单词:练双数组协同推进。
- 2486. 追加字符以获得子序列:练双数组协同推进。
- 2825. 循环增长使字符串子序列等于另一个字符串:练双数组协同推进。
- 1023. 驼峰式匹配:练双数组协同推进。
- 3132. 找出与数组相加的整数 II:练双数组协同推进。
- 522. 最长特殊序列 II:练双数组协同推进。
- 1826. 有缺陷的传感器:练双数组协同推进,会员题。
- 1898. 可移除字符的最大数目:练双数组协同推进。
- 2565. 最少得分子序列:练双数组协同推进。
- 3302. 字典序最小的合法序列:练双数组协同推进。
三指针
- 2367. 等差三元组的数目:练多指针协同与状态维护;做到 O(n)。
- 2563. 统计公平数对的数目:练多指针协同与状态维护。
- 795. 区间子数组个数:练多指针协同与状态维护。
- 2444. 统计定界子数组的数目:练多指针协同与状态维护。
- 3347. 执行操作后元素的最高频率 II:练多指针协同与状态维护。
- 1213. 三个有序数组的交集:练多指针协同与状态维护,会员题。
- 3464. 正方形上的点之间的最大距离:练多指针协同与状态维护。
分组循环
- 485. 最大连续 1 的个数:练按段处理与不变量维护。
- 1446. 连续字符:练按段处理与不变量维护。
- 1869. 哪种连续子字符串更长:练按段处理与不变量维护。
- 2414. 最长的字母序连续子字符串的长度:练按段处理与不变量维护。
- 3456. 找出长度为 K 的特殊子字符串:练按段处理与不变量维护。
- 2273. 移除字母异位词后的结果数组:练按段处理与不变量维护。
- 2348. 全 0 子数组的数目:练按段处理与不变量维护。
- 1513. 仅含 1 的子串数:练按段处理与不变量维护。
- 1957. 删除字符使字符串变好:练按段处理与不变量维护。
- 674. 最长连续递增序列:练按段处理与不变量维护。
- 3708. 最长斐波那契子数组:练按段处理与不变量维护;做到 O(n)。
- 696. 计数二进制子串:练按段处理与不变量维护。
- 978. 最长湍流子数组:练按段处理与不变量维护。
- 2110. 股票平滑下跌阶段的数目:练按段处理与不变量维护。
- 228. 汇总区间:练按段处理与不变量维护。
- 2760. 最长奇偶子数组:练按段处理与不变量维护。
- 1887. 使数组元素相等的减少操作次数:练按段处理与不变量维护。
- 845. 数组中的最长山脉:练按段处理与不变量维护。
- 2038. 如果相邻两个颜色均相同则删除当前颜色:练按段处理与不变量维护。
- 2900. 最长相邻不相等子序列 I:练按段处理与不变量维护。
- 1759. 统计同质子字符串的数目:练按段处理与不变量维护。
- 3011. 判断一个数组是否可以变为有序:练按段处理与不变量维护。
- 1578. 使绳子变成彩色的最短时间:练按段处理与不变量维护。
- 1839. 所有元音按顺序排布的最长子字符串:练按段处理与不变量维护。
- 2765. 最长交替子数组:练按段处理与不变量维护。
- 3255. 长度为 K 的子数组的能量值 II:练按段处理与不变量维护。
- 3350. 检测相邻递增子数组 II:练按段处理与不变量维护。
- 3105. 最长的严格递增或递减子数组:练按段处理与不变量维护。
- 838. 推多米诺:练按段处理与不变量维护。
- 467. 环绕字符串中唯一的子字符串:练按段处理与不变量维护。
- 3499. 操作后最大活跃区段数 I:练按段处理与不变量维护。
- 413. 等差数列划分:练按段处理与不变量维护。
- 2147. 分隔长廊的方案数:练按段处理与不变量维护。
- 68. 文本左右对齐:练按段处理与不变量维护。
- 135. 分发糖果:练按段处理与不变量维护。
- 2948. 交换得到字典序最小的数组:练按段处理与不变量维护。
- 2593. 标记所有元素后数组的分数:练按段处理与不变量维护;做到 O(n)。
- 3640. 三段式数组 II:练按段处理与不变量维护。
- 2393. 严格递增的子数组个数:练按段处理与不变量维护,会员题。
- 3773. 最大等长连续字符组:练按段处理与不变量维护,会员题。
- 2436. 使子数组最大公约数大于一的最小分割数:练按段处理与不变量维护,会员题。
- 2495. 乘积为偶数的子数组数:练按段处理与不变量维护,会员题。
- 3063. 链表频率:练按段处理与不变量维护,会员题。
二分算法
二分查找
基础
- 34. 在排序数组中查找元素的第一个和最后一个位置:练边界二分与模板套用。
- 35. 搜索插入位置:练边界二分与模板套用。
- 704. 二分查找:练边界二分与模板套用。
- 744. 寻找比目标字母大的最小字母:练边界二分与模板套用。
- 2529. 正整数和负整数的最大计数:练边界二分与模板套用;做到 O(logn)。
进阶
- 1385. 两个数组间的距离值:练边界二分与模板套用。
- 2389. 和有限的最长子序列:练边界二分与模板套用。
- 1170. 比较字符串最小字母出现频次:练边界二分与模板套用。
- 2300. 咒语和药水的成功对数:练边界二分与模板套用。
- 2080. 区间内查询数字的频率:练边界二分与模板套用。
- 3488. 距离最小相等元素查询:练边界二分与模板套用;做法不止一种。
- 2563. 统计公平数对的数目:练边界二分与模板套用。
- 2070. 每一个查询的最大美丽值:练边界二分与模板套用。
- 1146. 快照数组:练边界二分与模板套用。
- 981. 基于时间的键值存储:练边界二分与模板套用;同 1146 题。
- 3508. 设计路由器:练边界二分与模板套用。
- 658. 找到 K 个最接近的元素:练边界二分与模板套用。
- 1818. 绝对差值和:练边界二分与模板套用。
- 911. 在线选举:练边界二分与模板套用。
- LCP 08. 剧情触发时间:练边界二分与模板套用。
- 1182. 与目标颜色间的最短距离:练边界二分与模板套用,会员题。
- 2819. 购买巧克力后的最小相对损失:练边界二分与模板套用,会员题。
- 1287. 有序数组中出现次数超过 25% 的元素:练边界二分与模板套用;做到 O(logn)。
- 2476. 二叉搜索树最近节点查询:练边界二分与模板套用。
- 1150. 检查一个数是否在数组中占绝大多数:练边界二分与模板套用,会员题。
二分答案
求最小
答疑
- 1283. 使结果不超过阈值的最小除数:练二分答案与最小可行值。
- 2187. 完成旅途的最少时间:练二分答案与最小可行值。
- 3824. 减小数组使其满足条件的最小 K 值:练二分答案与最小可行值。
- 1011. 在 D 天内送达包裹的能力:练二分答案与最小可行值。
- 875. 爱吃香蕉的珂珂:练二分答案与最小可行值。
- 3296. 移山所需的最少秒数:练二分答案与最小可行值;注:由于有其他做法,难度分会低一些,二分做法估计 1850。
- 3639. 变为活跃状态的最小时间:练二分答案与最小可行值。
- 475. 供暖器:练二分答案与最小可行值。
- 2594. 修车的最少时间:练二分答案与最小可行值。
- 1482. 制作 m 束花所需的最少天数:练二分答案与最小可行值。
- 3048. 标记所有下标的最早秒数 I:练二分答案与最小可行值。
- 3807. 修复边以遍历图的最小成本:练二分答案与最小可行值,会员题。
- 2604. 吃掉所有谷子的最短时间:练二分答案与最小可行值,会员题。
- 2702. 使数字变为非正数的最小操作次数:练二分答案与最小可行值,会员题。
- 1870. 准时到达的列车最小时速:练二分答案与最小可行值;避免浮点数。
- 3453. 分割正方形 I:练二分答案与最小可行值;浮点二分(也可以整数二分)。
求最大
- 275. H 指数 II:练二分答案与最大可行值。
- 2226. 每个小孩最多能分到多少糖果:练二分答案与最大可行值。
- 2982. 找出出现至少三次的最长特殊子字符串 II:练二分答案与最大可行值。
- 2576. 求出最多标记下标:练二分答案与最大可行值。
- 1898. 可移除字符的最大数目:练二分答案与最大可行值。
- 1802. 有界数组中指定下标处的最大值:练二分答案与最大可行值。
- 1642. 可以到达的最远建筑:练二分答案与最大可行值。
- 2861. 最大合金数:练二分答案与最大可行值。
- 3007. 价值和小于等于 K 的最大数字:练二分答案与最大可行值。
- 2141. 同时运行 N 台电脑的最长时间:练二分答案与最大可行值。
- 2258. 逃离火灾:练二分答案与最大可行值。
- 2071. 你可以安排的最多任务数目:练二分答案与最大可行值。
- LCP 78. 城墙防线:练二分答案与最大可行值。
- 1618. 找出适应屏幕的最大字号:练二分答案与最大可行值,会员题。
- 1891. 割绳子:练二分答案与最大可行值,会员题。
- 2137. 通过倒水操作让所有的水桶所含水量相等:练二分答案与最大可行值,会员题。
- 3344. 最大尺寸数组:练二分答案与最大可行值,会员题。
- 644. 子数组最大平均数 II:练二分答案与最大可行值,会员题。
二分间接值
- 3143. 正方形中的最多点数:练间接值转换与计数判断。
- 1648. 销售价值减少的颜色球:练间接值转换与计数判断。
最小化最大值
- 410. 分割数组的最大值:练值域二分与上界压缩。
- 2064. 分配给商店的最多商品的最小值:练值域二分与上界压缩。
- 3613. 最小化连通分量的最大成本:练值域二分与上界压缩。
- 1760. 袋子里最少数目的球:练值域二分与上界压缩。
- 1631. 最小体力消耗路径:练值域二分与上界压缩。
- 2439. 最小化数组中的最大值:练值域二分与上界压缩。
- 2560. 打家劫舍 IV:练值域二分与上界压缩。
- 778. 水位上升的泳池中游泳:练值域二分与上界压缩;相当于最小化路径最大值。
- 2616. 最小化数对的最大差值:练值域二分与上界压缩。
- 3419. 图的最大边权的最小值:练值域二分与上界压缩。
- 2513. 最小化两个数组中的最大值:练值域二分与上界压缩。
- 3733. 完成所有送货任务的最少时间:练值域二分与上界压缩;同 2513 题。
- 3399. 字符相同的最短子字符串 II:练值域二分与上界压缩。
- 3605. 数组的最小稳定性因子:练值域二分与上界压缩。
- LCP 12. 小张刷题计划:练值域二分与上界压缩。
- 774. 最小化去加油站的最大距离:练值域二分与上界压缩,会员题。
最大化最小值
- 3281. 范围内整数的最大得分:练答案二分与可行性判定。
- 3620. 恢复网络路径:练答案二分与可行性判定。
- 2517. 礼盒的最大甜蜜度:练答案二分与可行性判定。
- 1552. 两球之间的磁力:练答案二分与可行性判定;同 2517 题。
- 3710. 最大划分因子:练答案二分与可行性判定。
- 2812. 找出最安全路径:练答案二分与可行性判定。
- 2528. 最大化城市的最小电量:练答案二分与可行性判定。
- 3600. 升级后最大生成树稳定性:练答案二分与可行性判定;做法不止一种。
- 3449. 最大化游戏分数的最小值:练答案二分与可行性判定。
- 3464. 正方形上的点之间的最大距离:练答案二分与可行性判定。
- 1102. 得分最高的路径:练答案二分与可行性判定,会员题。
- 1231. 分享巧克力:练答案二分与可行性判定,会员题。
第 K 小/大
- 668. 乘法表中第 K 小的数:练值域二分与计数函数。
- 378. 有序矩阵中第 K 小的元素:练值域二分与计数函数。
- 719. 找出第 K 小的数对距离:练值域二分与计数函数。
- 878. 第 N 个神奇数字:练值域二分与计数函数。
- 1201. 丑数 III:练值域二分与计数函数。
- 793. 阶乘函数后 K 个零:练值域二分与计数函数。
- 373. 查找和最小的 K 对数字:练值域二分与计数函数。
- 1439. 有序矩阵中的第 k 个最小数组和:练值域二分与计数函数。
- 786. 第 K 个最小的质数分数:练值域二分与计数函数。
- 3116. 单面值组合的第 K 小金额:练值域二分与计数函数。
- 3134. 找出唯一性数组的中位数:练值域二分与计数函数。
- 2040. 两个有序数组的第 K 小乘积:练值域二分与计数函数。
- 2386. 找出数组的第 K 大和:练值域二分与计数函数。
- 1508. 子数组和排序后的区间和:练值域二分与计数函数。
- 3691. 最大子数组总值 II:练值域二分与计数函数;做到时间复杂度与 k 无关。
- 3520. 逆序对计数的最小阈值:练值域二分与计数函数,会员题。
- 1918. 第 K 小的子数组和:练值域二分与计数函数,会员题。
三分法
- 1515. 服务中心的最佳位置:练该小节核心套路;做法不止一种。
其他
- 69. x 的平方根:练补充套路与扩展变形;二分求最大的 m,满足 m2≤x(也可以二分求最小的满足 m2>x 的 m,减一得到答案)。
- 74. 搜索二维矩阵:练补充套路与扩展变形。
- 278. 第一个错误的版本:练补充套路与扩展变形。
- 374. 猜数字大小:练补充套路与扩展变形。
- 162. 寻找峰值:练补充套路与扩展变形。
- 1901. 寻找峰值 II:练补充套路与扩展变形。
- 852. 山脉数组的峰顶索引:练补充套路与扩展变形。
- 1095. 山脉数组中查找目标值:练补充套路与扩展变形。
- 153. 寻找旋转排序数组中的最小值:练补充套路与扩展变形。
- 154. 寻找旋转排序数组中的最小值 II:练补充套路与扩展变形。
- 33. 搜索旋转排序数组:练补充套路与扩展变形。
- 81. 搜索旋转排序数组 II:练补充套路与扩展变形。
- 222. 完全二叉树的节点个数:练补充套路与扩展变形。
- 1539. 第 k 个缺失的正整数:练补充套路与扩展变形。
- 540. 有序数组中的单一元素:练补充套路与扩展变形。
- 4. 寻找两个正序数组的中位数:练补充套路与扩展变形。
- 1064. 不动点:练补充套路与扩展变形,会员题。
- 702. 搜索长度未知的有序数组:练补充套路与扩展变形,会员题。
- 2936. 包含相等值数字块的数量:练补充套路与扩展变形,会员题。
- 1060. 有序数组中的缺失元素:练补充套路与扩展变形,会员题。
- 1198. 找出所有行中最小公共元素:练补充套路与扩展变形,会员题。
- 1428. 至少有一个 1 的最左端列:练补充套路与扩展变形,会员题。
- 1533. 找到最大整数的索引:练补充套路与扩展变形,会员题。
- 2387. 行排序矩阵的中位数:练补充套路与扩展变形,会员题。
- 302. 包含全部黑色像素的最小矩形:练补充套路与扩展变形,会员题。
单调栈
单调栈
基础
- 739. 每日温度:练维护单调性与贡献计算。
- 1475. 商品折扣后的最终价格:练维护单调性与贡献计算;非暴力做法。
- 496. 下一个更大元素 I:练维护单调性与贡献计算。
- 503. 下一个更大元素 II:练维护单调性与贡献计算。
- 901. 股票价格跨度:练维护单调性与贡献计算。
- 853. 车队:练维护单调性与贡献计算。
进阶
- 1019. 链表中的下一个更大节点:练维护单调性与贡献计算。
- 654. 最大二叉树:练维护单调性与贡献计算;做到 O(n)。
- 768. 最多能完成排序的块 II:练维护单调性与贡献计算。
- 3814. 预算下的最大总容量:练维护单调性与贡献计算。
- 3676. 碗子数组的数目:练维护单调性与贡献计算。
- 2054. 两个最好的不重叠活动:练维护单调性与贡献计算。
- 456. 132 模式:练维护单调性与贡献计算。
- 3113. 边界元素是最大值的子数组数目:练维护单调性与贡献计算。
- 2866. 美丽塔 II:练维护单调性与贡献计算。
- 975. 奇偶跳:练维护单调性与贡献计算。
- 1944. 队列中可以看到的人数:练维护单调性与贡献计算。
- 2454. 下一个更大元素 IV:练维护单调性与贡献计算。
- 1130. 叶值的最小代价生成树:练维护单调性与贡献计算。
- 2289. 使数组按非递减顺序排列:练维护单调性与贡献计算。
- 1776. 车队 II:练维护单调性与贡献计算。
- 2736. 最大和查询:练维护单调性与贡献计算。
- 3420. 统计 K 次操作以内得到非递减子数组的数目:练维护单调性与贡献计算。
- 3221. 最大数组跳跃得分 II:练维护单调性与贡献计算,会员题。
- 1966. 未排序数组中的可被二分搜索的数:练维护单调性与贡献计算,会员题。
- 2832. 每个元素为最大值的最大范围:练维护单调性与贡献计算,会员题。
- 1063. 有效子数组的数目:练维护单调性与贡献计算,会员题。
- 1950. 所有子数组最小值中的最大值:练维护单调性与贡献计算,会员题。
- 2282. 在一个网格中可以看到的人数:练维护单调性与贡献计算,会员题。
- 3555. 排序每个滑动窗口中最小的子数组:练维护单调性与贡献计算;会员题非暴力做法。
- 2355. 你能拿走的最大图书数量:练维护单调性与贡献计算,会员题。
- 962. 最大宽度坡:练维护单调性与贡献计算。
- 3542. 将所有元素变为 0 的最少操作次数:练维护单调性与贡献计算。
- 1124. 表现良好的最长时间段:练维护单调性与贡献计算。
- 2863. 最长半递减子数组的长度:练维护单调性与贡献计算,会员题。
矩形
- 84. 柱状图中最大的矩形:练维护单调性与贡献计算。
- 1793. 好子数组的最大分数:练维护单调性与贡献计算。
- 85. 最大矩形:练维护单调性与贡献计算。
- 221. 最大正方形:练维护单调性与贡献计算。
- 42. 接雨水:练维护单调性与贡献计算;做法不止一种。
- 1504. 统计全 1 子矩形:练维护单调性与贡献计算。
- 1277. 统计全为 1 的正方形子矩阵:练维护单调性与贡献计算。
- 755. 倒水:练维护单调性与贡献计算,会员题。
贡献法
- 907. 子数组的最小值之和:练维护单调性与贡献计算。
- 2104. 子数组范围和(最大值-最小值):练维护单调性与贡献计算。
- 1856. 子数组最小乘积的最大值:练维护单调性与贡献计算。
- 2818. 操作使得分最大:练维护单调性与贡献计算。
- 2281. 巫师的总力量和(最小值×和):练维护单调性与贡献计算。
- 3430. 最多 K 个元素的子数组的最值之和:练维护单调性与贡献计算。
- 3359. 查找最大元素不超过 K 的有序子矩阵:练维护单调性与贡献计算;会员题矩形。
- 2334. 元素值大于变化阈值的子数组:练维护单调性与贡献计算。
- 2962. 统计最大元素出现至少 K 次的子数组·我的题解:练维护单调性与贡献计算。
最小字典序
- 402. 移掉 K 位数字:练维护单调性与贡献计算。
- 1673. 找出最具竞争力的子序列:练维护单调性与贡献计算。
- 316. 去除重复字母:练维护单调性与贡献计算。
- 316 扩展:重复个数不超过 limit:练维护单调性与贡献计算。
- 1081. 不同字符的最小子序列:练维护单调性与贡献计算;同 316 题。
- 3816. 删除重复字符后的字典序最小字符串:练维护单调性与贡献计算。
- 321. 拼接最大数:练维护单调性与贡献计算。
- 2030. 含特定字母的最小子序列:练维护单调性与贡献计算。
网格图
网格图 DFS
- 200. 岛屿数量:练遍历搜索与状态标记。
- 695. 岛屿的最大面积:练遍历搜索与状态标记。
- 3619. 总价值可以被 K 整除的岛屿数目:练遍历搜索与状态标记。
- 2658. 网格图中鱼的最大数目:练遍历搜索与状态标记。
- 面试题 16.19. 水域大小:练遍历搜索与状态标记。
- LCS 03. 主题空间:练遍历搜索与状态标记。
- 463. 岛屿的周长:练遍历搜索与状态标记。
- 733. 图像渲染:练遍历搜索与状态标记。
- 1034. 边界着色:练遍历搜索与状态标记。
- 1020. 飞地的数量:练遍历搜索与状态标记。
- 2684. 矩阵中移动的最大次数:练遍历搜索与状态标记。
- 1254. 统计封闭岛屿的数目:练遍历搜索与状态标记。
- 130. 被围绕的区域:练遍历搜索与状态标记。
- 1905. 统计子岛屿:练遍历搜索与状态标记。
- 1391. 检查网格中是否存在有效路径:练遍历搜索与状态标记。
- 417. 太平洋大西洋水流问题:练遍历搜索与状态标记。
- 529. 扫雷游戏:练遍历搜索与状态标记。
- 1559. 二维网格图中探测环:练遍历搜索与状态标记。
- 827. 最大人工岛:练遍历搜索与状态标记。
- LCP 63. 弹珠游戏:练遍历搜索与状态标记;也可以不用 DFS。
- 305. 岛屿数量 II:练遍历搜索与状态标记,会员题。
- 2061. 扫地机器人清扫过的空间个数:练遍历搜索与状态标记;会员题也可以迭代。
- 2852. 所有单元格的远离程度之和:练遍历搜索与状态标记,会员题。
- 489. 扫地机器人:练遍历搜索与状态标记,会员题。
- 1970. 你能穿过矩阵的最后一天:练遍历搜索与状态标记;做法不止一种。
网格图 BFS
- 1926. 迷宫中离入口最近的出口:练层序扩展与最短路。
- 1091. 二进制矩阵中的最短路径:练层序扩展与最短路。
- 1162. 地图分析:练层序扩展与最短路。
- 542. 01 矩阵:练层序扩展与最短路。
- 994. 腐烂的橘子:练层序扩展与最短路。
- 1765. 地图中的最高点:练层序扩展与最短路。
- 934. 最短的桥:练层序扩展与最短路。
- 2146. 价格范围内最高排名的 K 样物品:练层序扩展与最短路。
- 1293. 网格中的最短路径:练层序扩展与最短路。
- 909. 蛇梯棋:练层序扩展与最短路。
- 1210. 穿过迷宫的最少移动次数:练层序扩展与最短路。
- 675. 为高尔夫比赛砍树:练层序扩展与最短路。
- 2812. 找出最安全路径:练层序扩展与最短路。
- 749. 隔离病毒:练层序扩展与最短路。
- 1730. 获取食物的最短路径:练层序扩展与最短路,会员题。
- 286. 墙与门:练层序扩展与最短路,会员题。
- 490. 迷宫:练层序扩展与最短路,会员题。
- 505. 迷宫 II:练层序扩展与最短路,会员题。
- 499. 迷宫 III:练层序扩展与最短路,会员题。
- 317. 离建筑物最近的距离:练层序扩展与最短路,会员题。
- 2814. 避免淹死并到达目的地的最短时间:练层序扩展与最短路,会员题。
网格图 0-1 BFS
- 3286. 穿越网格图的安全路径:练层序扩展与最短路;做到 O(mn)。
- 2290. 到达角落需要移除障碍物的最小数目:练层序扩展与最短路。
- 1368. 使网格图至少有一条有效路径的最小代价:练层序扩展与最短路。
- 3552. 网格传送门旅游:练层序扩展与最短路。
- 1824. 最少侧跳次数:练层序扩展与最短路。
- LCP 56. 信物传送:练层序扩展与最短路。
综合应用
- 1631. 最小体力消耗路径:练该小节核心套路。
- 778. 水位上升的泳池中游泳:练该小节核心套路。
- 329. 矩阵中的最长递增路径:练该小节核心套路。
- 3568. 清理教室的最少移动:练该小节核心套路。
- 1036. 逃离大迷宫:练该小节核心套路。
- 864. 获取所有钥匙的最短路径:练该小节核心套路。
- 1263. 推箱子:练该小节核心套路。
- 2258. 逃离火灾:练该小节核心套路。
- 2556. 二进制矩阵中翻转最多一次使路径不连通:练该小节核心套路。
- 2577. 在网格图中访问一个格子的最少时间:练该小节核心套路。
- 2617. 网格图中最少访问的格子数:练该小节核心套路。
- LCP 13. 寻宝:练该小节核心套路。
- LCP 31. 变换的迷宫:练该小节核心套路。
- LCP 45. 自行车炫技赛场:练该小节核心套路。
- LCP 75. 传送卷轴:练该小节核心套路。
- 1778. 未知网格中的最短路径:练该小节核心套路,会员题。
- 694. 不同岛屿的数量:练该小节核心套路,会员题。
- 711. 不同岛屿的数量 II:练该小节核心套路,会员题。
- 1102. 得分最高的路径:练该小节核心套路,会员题。
位运算
基础题
- 3370. 仅含置位位的最小整数:练基础模板与边界处理。
- 3827. 统计单比特整数:练基础模板与边界处理。
- 3226. 使两个整数相等的位更改次数:练基础模板与边界处理。
- 1356. 根据数字二进制下 1 的数目排序:练基础模板与边界处理。
- 461. 汉明距离:练基础模板与边界处理。
- 2220. 转换数字的最少位翻转次数:练基础模板与边界处理;同 461 题。
- 1342. 将数字变成 0 的操作次数:练基础模板与边界处理;做到 O(1)。
- 476. 数字的补数:练基础模板与边界处理;做到 O(1)。
- 1009. 十进制整数的反码:练基础模板与边界处理;同 476 题。
- 868. 二进制间距:练基础模板与边界处理。
- 2917. 找出数组中的 K-or 值:练基础模板与边界处理。
- 693. 交替位二进制数:练基础模板与边界处理。
- 2657. 找到两个数组的前缀公共数组:练基础模板与边界处理。
- 面试题 05.01. 插入:练基础模板与边界处理。
- 231. 2 的幂:练基础模板与边界处理。
- 342. 4 的幂:练基础模板与边界处理。
- 191. 位 1 的个数:练基础模板与边界处理。
- 338. 比特位计数:练基础模板与边界处理;也可以 DP。
- 2595. 奇偶位数:练基础模板与边界处理;做到 O(1)。
- 2154. 将找到的值乘以 2:练基础模板与边界处理。
- 3211. 生成不含相邻零的二进制字符串:练基础模板与边界处理。
- 3690. 拆分合并数组:练基础模板与边界处理。
- 190. 颠倒二进制位:练基础模板与边界处理。
- 3750. 最少反转次数得到翻转二进制字符串:练基础模板与边界处理。
- 3769. 二进制反射排序:练基础模板与边界处理。
异或(XOR)的性质
- 1486. 数组异或操作:练该小节核心套路。
- 1720. 解码异或后的数组:练该小节核心套路。
- 2433. 找出前缀异或的原始数组:练该小节核心套路。
- 1310. 子数组异或查询:练该小节核心套路。
- 3702. 按位异或非零的最长子序列:练该小节核心套路。
- 2683. 相邻值的按位异或:练该小节核心套路。
- 1829. 每个查询的最大异或值:练该小节核心套路。
- 2997. 使数组异或和等于 K 的最少操作次数:练该小节核心套路。
- 1442. 形成两个异或相等数组的三元组数目:练该小节核心套路。
- 2429. 最小异或:练该小节核心套路。
- 2527. 查询数组异或美丽值:练该小节核心套路。
- 2317. 操作后的最大异或和:练该小节核心套路。
- 2588. 统计美丽子数组数目:练该小节核心套路。
- 2564. 子字符串异或查询:练该小节核心套路。
- 1734. 解码异或后的排列:练该小节核心套路。
- 2857. 统计距离为 k 的点对:练该小节核心套路。
- 1803. 统计异或值在范围内的数对有多少:练该小节核心套路。
- 3215. 用偶数异或设置位计数三元组 II:练该小节核心套路,会员题。
与或(AND/OR)的性质
- 2980. 检查按位或是否存在尾随零:练该小节核心套路。
- 1318. 或运算的最小翻转次数:练该小节核心套路。
- 2419. 按位与最大的最长子数组:练该小节核心套路。
- 2871. 将数组分割成最多数目的子数组:练该小节核心套路。
- 2401. 最长优雅子数组:练该小节核心套路。
- 2680. 最大或值:练该小节核心套路;可以做到 O(1) 额外空间。
- 3133. 数组最后一个元素的最小值:练该小节核心套路。
- 3108. 带权图里旅途的最小代价:练该小节核心套路。
- 3117. 划分数组得到最小的值之和:练该小节核心套路。
- 3125. 使得按位与结果为 0 的最大数字:练该小节核心套路,会员题。
AND/OR LogTrick
- 3171. 找到按位或最接近 K 的子数组:练该小节核心套路。
- 1521. 找到最接近目标值的函数值:练该小节核心套路;同 3171 题,OR 改成 AND。
- 3097. 或值至少为 K 的最短子数组 II:练该小节核心套路。
- 2411. 按位或最大的最小子数组长度:练该小节核心套路。
- 3209. 子数组按位与值为 K 的数目:练该小节核心套路。
- 898. 子数组按位或操作:练该小节核心套路。
GCD LogTrick
- 2447. 最大公因数等于 K 的子数组数目:练该小节核心套路;非暴力做法。
- 2654. 使数组所有元素变成 1 的最少操作次数:练该小节核心套路;非暴力做法。
- 3605. 数组的最小稳定性因子:练该小节核心套路。
- 3574. 最大子数组 GCD 分数:练该小节核心套路;非暴力做法。
- 2941. 子数组的最大 GCD-Sum:练该小节核心套路,会员题。
拆位 / 贡献法
- 477. 汉明距离总和:练元素贡献拆分。
- 1863. 找出所有子集的异或总和再求和:练元素贡献拆分;可以做到 O(n) 时间。
- 2425. 所有数对的异或和:练元素贡献拆分;可以做到 O(n+m) 时间。
- 2275. 按位与结果大于零的最长组合:练元素贡献拆分。
- 1835. 所有数对按位与结果的异或和:练元素贡献拆分。
- 3688. 偶数的按位或运算:练元素贡献拆分。
- 2505. 所有子序列和的按位或:练元素贡献拆分,会员题。
- 3153. 所有数对中数位不同之和:练元素贡献拆分。
试填法
- 421. 数组中两个数的最大异或值:练该小节核心套路。
- 3806. 增加操作后最大按位与的结果:练该小节核心套路。
- 2935. 找出强数对的最大异或值 II:练该小节核心套路。
- 3007. 价值和小于等于 K 的最大数字:练该小节核心套路。
- 3145. 大数组元素的乘积:练该小节核心套路。
- 3022. 给定操作次数内使剩余元素的或值最小:练该小节核心套路。
- 3287. 求出数组中最大序列值:练该小节核心套路;做到 O(nUlogU),其中 U=27。
- 3344. 最大尺寸数组:练该小节核心套路,会员题。
恒等式
- 1835. 所有数对按位与结果的异或和:练该小节核心套路。
- 2354. 优质数对的数目:练该小节核心套路。
线性基
- 3681. 子序列最大 XOR 值:练该小节核心套路。
- 3630. 划分数组得到最大异或运算和与运算之和:练该小节核心套路。
思维题
- 2546. 执行逐位运算使字符串相等:练该小节核心套路。
- 1558. 得到目标数组的最少函数调用次数:练该小节核心套路。
- 2571. 将整数减少到零需要的最少操作数:练该小节核心套路。
- 3315. 构造最小位运算数组 II:练该小节核心套路。
- 2568. 最小无法得到的或值:练该小节核心套路。
- 3644. 排序排列:练该小节核心套路。
- 2509. 查询树中环的长度:练该小节核心套路。
- 2939. 最大异或乘积:练该小节核心套路。
- 2749. 得到整数零需要执行的最少操作数:练该小节核心套路。
- 2835. 使子序列的和等于目标的最少操作次数:练该小节核心套路。
- 2897. 对数组执行操作使平方和最大:练该小节核心套路。
- 810. 黑板异或游戏:练该小节核心套路。
- 3064. 使用按位查询猜测数字 I:练该小节核心套路,会员题。
- 3094. 使用按位查询猜测数字 II:练该小节核心套路,会员题。
其他
- 136. 只出现一次的数字:练补充套路与扩展变形。
- 260. 只出现一次的数字 III:练补充套路与扩展变形。
- 2965. 找出缺失和重复的数字:练补充套路与扩展变形。
- 137. 只出现一次的数字 II:练补充套路与扩展变形。
- 645. 错误的集合:练补充套路与扩展变形。
- 371. 两整数之和:练补充套路与扩展变形。
- 201. 数字范围按位与:练补充套路与扩展变形。
- 2438. 二的幂数组中查询范围内的乘积:练补充套路与扩展变形。
- 1680. 连接连续二进制数字:练补充套路与扩展变形。
- 1261. 在受污染的二叉树中查找元素:练补充套路与扩展变形;做到 O(1) 额外空间。
- 89. 格雷编码:练补充套路与扩展变形。
- 1238. 循环码排列:练补充套路与扩展变形。
- 3766. 将数字变成二进制回文数的最少操作:练补充套路与扩展变形;非暴力做法。
- 3782. 交替删除操作后最后剩下的整数:练补充套路与扩展变形。
- 390. 消除游戏:练补充套路与扩展变形。
- 982. 按位与为零的三元组:练补充套路与扩展变形。
- 3307. 找出第 K 个字符 II:练补充套路与扩展变形。
- 1611. 使整数变为 0 的最少操作次数:练补充套路与扩展变形。
- 3514. 不同 XOR 三元组的数目 II:练补充套路与扩展变形。
- LCP 81. 与非的谜题:练补充套路与扩展变形。
- 751. IP 到 CIDR:练补充套路与扩展变形,会员题。
- 3595. 一次或两次:练补充套路与扩展变形;会员题结合 137 和 260 的思路。
- 3141. 最大汉明距离:练补充套路与扩展变形,会员题。
图论算法
图的遍历
深度优先搜索(DFS)
- 547. 省份数量:练遍历搜索与状态标记。
- 1971. 寻找图中是否存在路径:练遍历搜索与状态标记。
- 797. 所有可能的路径:练遍历搜索与状态标记。
- 1306. 跳跃游戏 III:练遍历搜索与状态标记。
- 841. 钥匙和房间:练遍历搜索与状态标记。
- 2316. 统计无向图中无法互相到达点对数:练遍历搜索与状态标记。
- 1319. 连通网络的操作次数:练遍历搜索与状态标记。
- 2492. 两个城市间路径的最小分数:练遍历搜索与状态标记。
- 3310. 移除可疑的方法:练遍历搜索与状态标记。
- 2685. 统计完全连通分量的数量:练遍历搜索与状态标记。
- 2192. 有向无环图中一个节点的所有祖先:练遍历搜索与状态标记。
- 3387. 两天自由外汇交易后的最大货币数:练遍历搜索与状态标记。
- 924. 尽量减少恶意软件的传播:练遍历搜索与状态标记;附思考题。
- 2101. 引爆最多的炸弹:练遍历搜索与状态标记。
- 721. 账户合并:练遍历搜索与状态标记。
- 207. 课程表:练遍历搜索与状态标记;三色标记法判环。
- 802. 找到最终的安全状态:练遍历搜索与状态标记。
- 3695. 交换元素后的最大交替和:练遍历搜索与状态标记。
- 928. 尽量减少恶意软件的传播 II:练遍历搜索与状态标记。
- 2092. 找出知晓秘密的所有专家:练遍历搜索与状态标记。
- 3108. 带权图里旅途的最小代价:练遍历搜索与状态标记。
- LCP 07. 传递信息:练遍历搜索与状态标记。
- 261. 以图判树:练遍历搜索与状态标记,会员题。
- 323. 无向图中连通分量的数目:练遍历搜索与状态标记,会员题。
- 1298. 你能从盒子里获得的最大糖果数:练遍历搜索与状态标记。
广度优先搜索(BFS)
- 3243. 新增道路查询后的最短距离 I:练层序扩展与最短路。
- 1311. 获取你好友已观看的视频:练层序扩展与最短路。
- 3015. 按距离统计房屋对数目 I:练层序扩展与最短路。
- 1129. 颜色交替的最短路径:练层序扩展与最短路。
- 2039. 网络空闲的时刻:练层序扩展与最短路。
- 2608. 图中的最短环:练层序扩展与最短路。
- 815. 公交路线:练层序扩展与最短路。
- 3807. 修复边以遍历图的最小成本:练层序扩展与最短路,会员题。
图论建模 + BFS 最短路
- 433. 最小基因变化:练层序扩展与最短路。
- 1284. 转化为全零矩阵的最少反转次数:练层序扩展与最短路。
- 773. 滑动谜题:练层序扩展与最短路。
- 752. 打开转盘锁:练层序扩展与最短路。
- 3690. 拆分合并数组:练层序扩展与最短路。
- 301. 删除无效的括号:练层序扩展与最短路。
- 514. 自由之路:练层序扩展与最短路。
- 847. 访问所有节点的最短路径:练层序扩展与最短路。
- 854. 相似度为 K 的字符串:练层序扩展与最短路。
- 127. 单词接龙:练层序扩展与最短路;双向广搜。
- 488. 祖玛游戏:练层序扩展与最短路。
- 1197. 进击的骑士:练层序扩展与最短路,会员题。
- 3141. 最大汉明距离:练层序扩展与最短路,会员题。
- 2998. 使 X 和 Y 相等的最少操作次数:练层序扩展与最短路。
- 1345. 跳跃游戏 IV:练层序扩展与最短路。
- 2059. 转化数字的最小运算数:练层序扩展与最短路。
- 1654. 到家的最少跳跃次数:练层序扩展与最短路。
- 3629. 通过质数传送到达终点的最少跳跃次数:练层序扩展与最短路。
- LCP 09. 最小跳跃次数:练层序扩展与最短路。
拓扑排序
拓扑排序
- 210. 课程表 II:练入度建模与有向图处理。
- 2115. 从给定原材料中找到所有可以做出的菜:练入度建模与有向图处理。
- 2392. 给定条件下构造矩阵:练入度建模与有向图处理。
- 802. 找到最终的安全状态:练入度建模与有向图处理。
- 1591. 奇怪的打印机 II:练入度建模与有向图处理。
- 1203. 项目管理:练入度建模与有向图处理。
- 1632. 矩阵转换后的排名:练入度建模与有向图处理。
- 2603. 收集树中金币:练入度建模与有向图处理。
- LCR 114. 火星词典:练入度建模与有向图处理。
- 444. 序列重建:练入度建模与有向图处理;会员题拓扑序是否唯一。
- 3481. 应用替换:练入度建模与有向图处理;会员题也可以记忆化搜索。
- 269. 火星词典:练入度建模与有向图处理,会员题。
- 2371. 最小化网格中的最大值:练入度建模与有向图处理;会员题同 1632 题。
- 310. 最小高度树:练入度建模与有向图处理。
- 1361. 验证二叉树:练入度建模与有向图处理。
在拓扑序上 DP
- 851. 喧闹和富有:练 DAG 上状态转移。
- 2050. 并行课程 III:练 DAG 上状态转移。
- 3620. 恢复网络路径:练 DAG 上状态转移。
- 1857. 有向图中最大颜色值:练 DAG 上状态转移。
- 1136. 并行课程:练 DAG 上状态转移,会员题。
基环树
- 2359. 找到离给定两个节点最近的节点:练入度建模与有向图处理。
- 2360. 图中的最长环:练入度建模与有向图处理。
- 684. 冗余连接:练入度建模与有向图处理;做法不止一种。
- 685. 冗余连接 II:练入度建模与有向图处理。
- 2876. 有向图访问计数:练入度建模与有向图处理。
- 2127. 参加会议的最多员工数:练入度建模与有向图处理。
- 2836. 在传球游戏中最大化函数值:练入度建模与有向图处理;做法不止一种。
- LCP 21. 追逐游戏:练入度建模与有向图处理。
- 2204. 无向图中到环的距离:练入度建模与有向图处理,会员题。
- 287. 寻找重复数:练入度建模与有向图处理。
最短路
单源最短路:Dijkstra 算法
- 743. 网络延迟时间:练最短路径建模。
- 3341. 到达最后一个房间的最少时间 I:练最短路径建模。
- 3112. 访问消失节点的最少时间:练最短路径建模。
- 2642. 设计可以求最短路径的图类:练最短路径建模。
- 3604. 有向图中到达终点的最少时间:练最短路径建模。
- 1514. 概率最大的路径:练最短路径建模。
- 3650. 边反转的最小路径总成本:练最短路径建模。
- 3342. 到达最后一个房间的最少时间 II:练最短路径建模。
- 1631. 最小体力消耗路径:练最短路径建模;网格图 做法不止一种。
- 1786. 从第一个节点出发到最后一个节点的受限路径数:练最短路径建模。
- 3123. 最短路径中的边:练最短路径建模。
- 1976. 到达目的地的方案数:练最短路径建模。
- 778. 水位上升的泳池中游泳:练最短路径建模;网格图 做法不止一种。
- 2662. 前往目标的最小代价:练最短路径建模。
- 3377. 使两个整数相等的数位操作:练最短路径建模。
- 2045. 到达目的地的第二短时间:练最短路径建模;也可以 BFS。
- 3419. 图的最大边权的最小值:练最短路径建模;做法不止一种。
- 882. 细分图中的可到达节点:练最短路径建模。
- 2203. 得到要求路径的最小带权子图:练最短路径建模。
- 2577. 在网格图中访问一个格子的最少时间:练最短路径建模。
- 818. 赛车:练最短路径建模。
- 1928. 规定时间内到达终点的最小花费:练最短路径建模。
- 787. K 站中转内最便宜的航班:练最短路径建模。
- 2699. 修改图中的边权:练最短路径建模。
- 1810. 隐藏网格下的最小消耗路径:练最短路径建模,会员题。
- 2093. 前往目标城市的最小费用:练最短路径建模,会员题。
- 2473. 购买苹果的最低成本:练最短路径建模,会员题。
- 2737. 找到最近的标记节点:练最短路径建模,会员题。
- LCP 35. 电动车游城市:练最短路径建模。
- 3599. 划分数组得到最小 XOR:练最短路径建模;做法不止一种。
- 3594. 所有人渡河所需的最短时间:练最短路径建模。
- 3778. 排除一个最大权重边的最小距离:练最短路径建模,会员题。
- 2714. 找到 K 次跨越的最短路径:练最短路径建模,会员题。
- 2589. 完成所有任务的最少时间:练最短路径建模;做法不止一种。
全源最短路:Floyd 算法
- 2642. 设计可以求最短路径的图类:练最短路径建模。
- 1334. 阈值距离内邻居最少的城市:练最短路径建模。
- 2976. 转换字符串的最小成本 I:练最短路径建模。
- 2959. 关闭分部的可行集合数目:练最短路径建模。
- 2977. 转换字符串的最小成本 II:练最短路径建模。
- 1462. 课程表 IV:练最短路径建模。
- 2101. 引爆最多的炸弹:练最短路径建模。
最小生成树
- 1584. 连接所有点的最小费用:练连通最优构造。
- 3600. 升级后最大生成树稳定性:练连通最优构造;做法不止一种。
- 1489. 找到最小生成树里的关键边和伪关键边:练连通最优构造。
- 1135. 最低成本连通所有城市:练连通最优构造,会员题。
- 1168. 水资源分配优化:练连通最优构造,会员题。
- 3219. 切蛋糕的最小总开销 II:练连通最优构造。
欧拉路径/欧拉回路
- 332. 重新安排行程:练该小节核心套路。
- 753. 破解保险箱:练该小节核心套路。
- 2097. 合法重新排列数对:练该小节核心套路。
强连通分量/双连通分量
- 1192. 查找集群内的关键连接:练该小节核心套路。
- 1568. 使陆地分离的最少天数:练该小节核心套路。
- LCP 54. 夺回据点:练该小节核心套路。
- 3383. 施法所需最低符文数量:练该小节核心套路,会员题。
二分图染色
- 785. 判断二分图:练该小节核心套路。
- 886. 可能的二分法:练该小节核心套路。
- 3710. 最大划分因子:练该小节核心套路。
网络流
- 1947. 最大兼容性评分和:练容量建模与流量分配。
- 3376. 破解锁的最少时间 I:练容量建模与流量分配。
- 2850. 将石头分散到网格图的最少移动次数:练容量建模与流量分配。
- 1879. 两个数组最小的异或值之和:练容量建模与流量分配。
- 1349. 参加考试的最大学生数:练容量建模与流量分配。
- 2172. 数组的最大与和:练容量建模与流量分配。
- 3276. 选择矩阵中单元格的最大得分:练容量建模与流量分配。
- 1595. 连通两组点的最小成本:练容量建模与流量分配。
- 3257. 放三个车的价值之和最大 II:练容量建模与流量分配。
- LCP 04. 覆盖:练容量建模与流量分配。
- LCP 38. 守卫城堡:练容量建模与流量分配。
- 1820. 最多邀请的个数:练容量建模与流量分配;会员题二分图最大匹配·模板题。
- 2403. 杀死所有怪物的最短时间:练容量建模与流量分配;会员题同 3376 题。
- 3385. 破解锁的最少时间 II:练容量建模与流量分配;会员题同 3376 题。
- 1066. 校园自行车分配 II:练容量建模与流量分配;会员题一对一,但不是完美匹配。
- 2123. 使矩阵中的 1 互不相邻的最小操作数:练容量建模与流量分配;会员题二分图最大独立集。
- 2463. 最小移动总距离:练容量建模与流量分配;做到 O((n+m)log(n+m))。
其他
- 1042. 不邻接植花:练补充套路与扩展变形。
- 1761. 一个图中连通三元组的最小度数:练补充套路与扩展变形。
- 2508. 添加边使所有节点度数都为偶数:练补充套路与扩展变形。
- 1579. 保证图可完全遍历:练补充套路与扩展变形。
- 2065. 最大化一张图中的路径价值:练补充套路与扩展变形。
- 1697. 检查边长度限制的路径是否存在:练补充套路与扩展变形。
- 2242. 节点序列的最大得分:练补充套路与扩展变形。
- 2493. 将节点分成尽可能多的组:练补充套路与扩展变形。
- 1782. 统计点对的数目:练补充套路与扩展变形。
- 3666. 使二进制字符串全为 1 的最少操作次数:练补充套路与扩展变形。
- 2612. 最少翻转操作数:练补充套路与扩展变形。
- 3435. 最短公共超序列的字母出现频率:练补充套路与扩展变形。
- 466. 统计重复个数:练补充套路与扩展变形;做到 O(∣s1∣+∣s2∣)。
- LCP 16. 游乐园的游览计划:练补充套路与扩展变形。
- 277. 搜寻名人:练补充套路与扩展变形,会员题。
- 1724. 检查边长度限制的路径是否存在 II:练补充套路与扩展变形,会员题。
- 2077. 殊途同归:练补充套路与扩展变形;会员题三元环计数。
- 3656. 判断是否存在简单图:练补充套路与扩展变形;会员题Erdős–Gallai 定理。
动态规划
入门 DP
爬楼梯
- 70. 爬楼梯:练基础模型与状态定义。
- 746. 使用最小花费爬楼梯:练基础模型与状态定义。
- 3693. 爬楼梯 II:练基础模型与状态定义。
- 377. 组合总和 Ⅳ:练基础模型与状态定义。
- 2466. 统计构造好字符串的方案数:练基础模型与状态定义。
- 2266. 统计打字方案数:练基础模型与状态定义。
- 2533. 好二进制字符串的数量:练基础模型与状态定义;会员题同 2466 题。
打家劫舍
答疑
- 198. 打家劫舍:练基础模型与状态定义。
- 213. 打家劫舍 II:练基础模型与状态定义。
- 2320. 统计放置房子的方式数:练基础模型与状态定义。
- 740. 删除并获得点数:练基础模型与状态定义。
- 3186. 施咒的最大总伤害:练基础模型与状态定义。
- 2140. 解决智力问题:练基础模型与状态定义。
最大子数组和(最大子段和)
- 前缀和:练基础模型与状态定义。
- 53. 最大子数组和:练基础模型与状态定义。
- 2606. 找到最大开销的子字符串:练基础模型与状态定义。
- 1749. 任意子数组和的绝对值的最大值:练基础模型与状态定义。
- 1191. K 次串联后最大子数组之和:练基础模型与状态定义。
- 918. 环形子数组的最大和:练基础模型与状态定义。
- 2321. 拼接数组的最大分数:练基础模型与状态定义。
- 152. 乘积最大子数组:练基础模型与状态定义。
- 1186. 删除一次得到子数组最大和:练基础模型与状态定义。
- 3381. 长度可被 K 整除的子数组的最大元素和:练基础模型与状态定义。
网格图 DP
基础
- 64. 最小路径和:练基础模板与边界处理。
- 62. 不同路径:练基础模板与边界处理。
- 63. 不同路径 II:练基础模板与边界处理。
- 120. 三角形最小路径和:练基础模板与边界处理。
- 3393. 统计异或值为给定值的路径数目:练基础模板与边界处理。
- 931. 下降路径最小和:练基础模板与边界处理。
- 3603. 交替方向的最小路径代价 II:练基础模板与边界处理。
- 2304. 网格中的最小路径代价:练基础模板与边界处理。
- 1289. 下降路径最小和 II:练基础模板与边界处理。
- 3418. 机器人可以获得的最大金币数:练基础模板与边界处理。
- 3742. 网格中得分最大的路径:练基础模板与边界处理。
- 2684. 矩阵中移动的最大次数:练基础模板与边界处理。
- 1824. 最少侧跳次数:练基础模板与边界处理。
进阶
- 1594. 矩阵的最大非负积:练常见变形与综合运用。
- 1301. 最大得分的路径数目:练常见变形与综合运用。
- 3665. 统计镜子反射路径数目:练常见变形与综合运用。
- 2435. 矩阵中和能被 K 整除的路径:练常见变形与综合运用。
- 174. 地下城游戏:练常见变形与综合运用。
- 329. 矩阵中的最长递增路径:练常见变形与综合运用。
- 2328. 网格图中递增路径的数目:练常见变形与综合运用。
- 2267. 检查是否有合法括号字符串路径:练常见变形与综合运用。
- 1937. 扣分后的最大得分:练常见变形与综合运用。
- 3363. 最多可收集的水果数目:练常见变形与综合运用。
- 1463. 摘樱桃 II:练常见变形与综合运用。
- 741. 摘樱桃:练常见变形与综合运用。
- 3459. 最长 V 形对角线段的长度:练常见变形与综合运用。
- 2510. 检查是否有路径经过相同数量的 0 和 1:练常见变形与综合运用,会员题。
背包
0-1 背包
- 416. 分割等和子集:练容量状态与转移顺序。
- 494. 目标和:练容量状态与转移顺序。
- 2915. 和为目标值的最长子序列的长度:练容量状态与转移顺序。
- 2787. 将一个数字表示成幂的和的方案数:练容量状态与转移顺序。
- 3180. 执行操作可获得的最大总奖励 I:练容量状态与转移顺序。
- 474. 一和零:练容量状态与转移顺序。
- 3489. 零数组变换 IV:练容量状态与转移顺序。
- 3685. 含上限元素的子序列和:练容量状态与转移顺序。
- 1049. 最后一块石头的重量 II:练容量状态与转移顺序。
- 1774. 最接近目标价格的甜点成本:练容量状态与转移顺序。
- 879. 盈利计划:练容量状态与转移顺序。
- 3082. 求出所有子序列的能量和:练容量状态与转移顺序。
- 956. 最高的广告牌:练容量状态与转移顺序。
- 2518. 好分区的数目:练容量状态与转移顺序。
- 2742. 给墙壁刷油漆:练容量状态与转移顺序。
- 3287. 求出数组中最大序列值:练容量状态与转移顺序。
- 3181. 执行操作可获得的最大总奖励 II:练容量状态与转移顺序。
- LCP 47. 入场安检:练容量状态与转移顺序。
- 2291. 最大股票收益:练容量状态与转移顺序,会员题。
- 2431. 最大限度地提高购买水果的口味:练容量状态与转移顺序,会员题。
- 3647. 两个袋子中的最大重量:练容量状态与转移顺序;会员题多背包。
- 2189. 建造纸牌屋的方法数:练容量状态与转移顺序,会员题。
完全背包
- 322. 零钱兑换:练容量状态与转移顺序。
- 518. 零钱兑换 II:练容量状态与转移顺序。
- 279. 完全平方数:练容量状态与转移顺序。
- 3610. 目标和所需的最小质数个数:练容量状态与转移顺序,会员题。
- 3183. 达到总和的方法数量:练容量状态与转移顺序;会员题混合背包。
- 3592. 硬币面值还原:练容量状态与转移顺序。
- 1449. 数位成本和为目标值的最大数字:练容量状态与转移顺序。
多重背包(选做)
- 2585. 获得分数的方法数:练容量状态与转移顺序。
- 3333. 找到初始输入字符串 II:练容量状态与转移顺序。
- 2902. 和带限制的子多重集合的数目:练容量状态与转移顺序。
- 3489. 零数组变换 IV:练容量状态与转移顺序。
分组背包
- 1155. 掷骰子等于目标和的方法数:练容量状态与转移顺序。
- 1981. 最小化目标值与所选元素的差:练容量状态与转移顺序。
- 2218. 从栈中取出 K 个硬币的最大面值和:练容量状态与转移顺序。
树形背包(选做)
- 3562. 折扣价交易股票的最大利润:练容量状态与转移顺序。
经典线性 DP
最长公共子序列(LCS)
基础
- 1143. 最长公共子序列:练基础模板与边界处理。
- 583. 两个字符串的删除操作:练基础模板与边界处理。
- 712. 两个字符串的最小 ASCII 删除和:练基础模板与边界处理。
- 72. 编辑距离:练基础模板与边界处理。
- 1035. 不相交的线:练基础模板与边界处理。
- 1458. 两个子序列的最大点积:练基础模板与边界处理。
- 718. 最长重复子数组:练基础模板与边界处理。
进阶
- 3290. 最高乘法得分:练常见变形与综合运用。
- 115. 不同的子序列:练常见变形与综合运用。
- 3628. 插入一个字母的最大子序列数:练常见变形与综合运用。
- 3316. 从原字符串里进行删除操作的最多次数:练常见变形与综合运用。
- 1639. 通过给定词典构造目标字符串的方案数:练常见变形与综合运用。
- 97. 交错字符串:练常见变形与综合运用。
- 1092. 最短公共超序列:练常见变形与综合运用。
- 44. 通配符匹配:练常见变形与综合运用。
- 10. 正则表达式匹配:练常见变形与综合运用。
最长递增子序列(LIS)
- 2407 题:练该小节核心套路。
基础
- 300. 最长递增子序列:练基础模板与边界处理。
- 334. 递增的三元子序列:练基础模板与边界处理。
- 2826. 将三个组排序:练基础模板与边界处理。
- 1964. 找出到每个位置为止最长的有效障碍赛跑路线:练基础模板与边界处理。
- 2111. 使数组 K 递增的最少操作次数:练基础模板与边界处理。
进阶
- 3825. 按位与结果非零的最长上升子序列:练常见变形与综合运用。
- 1671. 得到山形数组的最少删除次数:练常见变形与综合运用。
- 354. 俄罗斯套娃信封问题:练常见变形与综合运用。
- 1626. 无矛盾的最佳球队:练常见变形与综合运用。
- 1691. 堆叠长方体的最大高度:练常见变形与综合运用。
- 960. 删列造序 III:练常见变形与综合运用。
- 2407. 最长递增子序列 II:练常见变形与综合运用。
- 673. 最长递增子序列的个数:练常见变形与综合运用。
- 1187. 使数组严格递增:练常见变形与综合运用。
- 1713. 得到子序列的最少操作次数:练常见变形与综合运用。
- 3288. 最长上升路径的长度:练常见变形与综合运用。
- 368. 最大整除子集:练常见变形与综合运用。
- 2901. 最长相邻不相等子序列 II:练常见变形与综合运用。
划分型 DP
判定能否划分
- 2369. 检查数组是否存在有效划分:练区间划分与状态设计。
- 139. 单词拆分:练区间划分与状态设计。
最优划分
- 132. 分割回文串 II:练区间划分与状态设计。
- 2707. 字符串中的额外字符:练区间划分与状态设计。
- 3196. 最大化子数组的总成本:练区间划分与状态设计。
- 2767. 将字符串分割为最少的美丽子字符串:练区间划分与状态设计。
- 91. 解码方法:练区间划分与状态设计。
- 639. 解码方法 II:练区间划分与状态设计。
- LCR 165. 解密数字:练区间划分与状态设计。
- 1043. 分隔数组以得到最大和:练区间划分与状态设计。
- 3144. 分割字符频率相等的最少子字符串:练区间划分与状态设计。
- 1416. 恢复数组:练区间划分与状态设计。
- 2472. 不重叠回文子字符串的最大数目:练区间划分与状态设计。
- 1105. 填充书架:练区间划分与状态设计。
- 2547. 拆分数组的最小代价:练区间划分与状态设计。
- 3578. 统计极差最大为 K 的分割方式数:练区间划分与状态设计。
- 2430. 对字母串可执行的最大删除数:练区间划分与状态设计。
- 2463. 最小移动总距离:练区间划分与状态设计。
- 3579. 字符串转换需要的最小操作数:练区间划分与状态设计;可以做到 O(n2)。
- 3500. 将数组分割为子数组的最小代价:练区间划分与状态设计。
- 2977. 转换字符串的最小成本 II:练区间划分与状态设计。
- 3441. 变成好标题的最少代价:练区间划分与状态设计。
- 2052. 将句子分隔成行的最低成本:练区间划分与状态设计,会员题。
- 2464. 有效分割中的最少子数组数目:练区间划分与状态设计,会员题。
约束划分个数
- 813. 最大平均值和的分组:练区间划分与状态设计。
- 3599. 划分数组得到最小 XOR:练区间划分与状态设计;做法不止一种。
- 410. 分割数组的最大值:练区间划分与状态设计。
- 1278. 分割回文串 III:练区间划分与状态设计。
- 1745. 分割回文串 IV:练区间划分与状态设计。
- 1335. 工作计划的最低难度:练区间划分与状态设计。
- 1473. 粉刷房子 III:练区间划分与状态设计。
- 2209. 用地毯覆盖后的最少白色砖块:练区间划分与状态设计。
- 1478. 安排邮筒:练区间划分与状态设计。
- 3473. 长度至少为 M 的 K 个子数组之和:练区间划分与状态设计。
- 1959. K 次调整数组大小浪费的最小总空间:练区间划分与状态设计。
- 2478. 完美分割的方案数:练区间划分与状态设计。
- 3538. 合并得到最小旅行时间:练区间划分与状态设计。
- 3505. 使 K 个子数组内元素相等的最少操作数:练区间划分与状态设计。
- 3077. K 个不相交子数组的最大能量值:练区间划分与状态设计。
- 2911. 得到 K 个半回文串的最少修改次数:练区间划分与状态设计。
- 3117. 划分数组得到最小的值之和:练区间划分与状态设计。
状态机 DP
买卖股票
- 121. 买卖股票的最佳时机:练多状态转移。
- 122. 买卖股票的最佳时机 II:练多状态转移。
- 123. 买卖股票的最佳时机 III:练多状态转移。
- 188. 买卖股票的最佳时机 IV:练多状态转移。
- 3573. 买卖股票的最佳时机 V:练多状态转移。
- 309. 买卖股票的最佳时机含冷冻期:练多状态转移。
- 714. 买卖股票的最佳时机含手续费:练多状态转移。
基础
- 3259. 超级饮料的最大强化能量:练多状态转移。
- 2222. 选择建筑的方案数:练多状态转移。
- 2708. 一个小组的最大实力值:练多状态转移;做到 O(n) 时间(联系 152 题)。
- 1567. 乘积为正数的最长子数组长度:练多状态转移。
- 2786. 访问数组中的位置使分数最大:练多状态转移。
- 1911. 最大交替子序列和:练多状态转移。
- 376. 摆动序列:练多状态转移。
- 3466. 最大硬币收集量:练多状态转移,会员题。
进阶
- 3628. 插入一个字母的最大子序列数:练多状态转移。
- 2771. 构造最长非递减子数组:练多状态转移。
- 1186. 删除一次得到子数组最大和:练多状态转移。
- 1594. 矩阵的最大非负积:练多状态转移。
- 3738. 替换至多一个元素后最长非递减子数组:练多状态转移。
- 3196. 最大化子数组的总成本:练多状态转移。
- 935. 骑士拨号器:练多状态转移。
- 1537. 最大得分:练多状态转移。
- 3811. 交替按位异或分割的数目:练多状态转移;做法不止一种。
- 2919. 使数组变美的最小增量运算数:练多状态转移。
- 801. 使序列递增的最小交换次数:练多状态转移。
- 3434. 子数组操作后的最大频率:练多状态转移。
- 1955. 统计特殊子序列的数目:练多状态转移。
- 3830. 移除至多一个元素后的最长交替子数组:练多状态转移。
- 3068. 最大节点价值之和:练多状态转移。
- 3640. 三段式数组 II:练多状态转移。
- 2272. 最大波动的子字符串:练多状态转移。
- 3661. 可以被机器人摧毁的最大墙壁数目:练多状态转移。
- 3743. 循环划分的最大得分:练多状态转移。
- LCP 19. 秋叶收藏集:练多状态转移。
- 276. 栅栏涂色:练多状态转移,会员题。
- 1746. 经过一次操作后的最大子数组和:练多状态转移,会员题。
- 2036. 最大交替子数组和:练多状态转移,会员题。
- 2361. 乘坐火车路线的最少费用:练多状态转移,会员题。
- 3269. 构建两个递增数组:练多状态转移,会员题。
其他线性 DP
一维 DP
- 3147. 从魔法师身上吸取的最大能量:练补充套路与扩展变形。
- 2944. 购买水果需要的最少金币数:练补充套路与扩展变形。
- 2140. 解决智力问题:练补充套路与扩展变形。
- 983. 最低票价:练补充套路与扩展变形。
- 368. 最大整除子集:练补充套路与扩展变形。
- 2901. 最长相邻不相等子序列 II:练补充套路与扩展变形。
- 650. 两个键的键盘:练补充套路与扩展变形。
- 871. 最低加油次数:练补充套路与扩展变形。
- 32. 最长有效括号:练补充套路与扩展变形。
- 2167. 移除所有载有违禁货物车厢所需的最少时间:练补充套路与扩展变形。
- 2188. 完成比赛的最少时间:练补充套路与扩展变形。
- 2896. 执行操作使两个字符串相等:练补充套路与扩展变形;做到 O(n)。
- 818. 赛车:练补充套路与扩展变形。
- 3389. 使字符频率相等的最少操作次数:练补充套路与扩展变形。
- 3464. 正方形上的点之间的最大距离:练补充套路与扩展变形。
- 3205. 最大数组跳跃得分 I:练补充套路与扩展变形;会员题有 O(n) 做法。
- 1259. 不相交的握手:练补充套路与扩展变形,会员题。
- 2597. 美丽子集的数目:练补充套路与扩展变形。
- 2638. 统计 K-Free 子集的总数:练补充套路与扩展变形;会员题上面这题的加强版。
不相交区间
- 2830. 销售利润最大化:练区间 DP 转移。
- 2008. 出租车的最大盈利:练区间 DP 转移。
- 2054. 两个最好的不重叠活动:练区间 DP 转移。
- 1235. 规划兼职工作:练区间 DP 转移;做法不止一种。
- 1751. 最多可以参加的会议数目 II:练区间 DP 转移。
- 3414. 不重叠区间的最大得分:练区间 DP 转移。
子数组 DP
- 53. 最大子数组和:练补充套路与扩展变形。
- 152. 乘积最大子数组:练补充套路与扩展变形。
- 1186. 删除一次得到子数组最大和:练补充套路与扩展变形。
- 3738. 替换至多一个元素后最长非递减子数组:练补充套路与扩展变形。
- 3524. 求出数组的 X 值 I:练补充套路与扩展变形。
- 3448. 统计可以被最后一个数位整除的子字符串数目:练补充套路与扩展变形。
- 2262. 字符串的总引力:练补充套路与扩展变形。
- 828. 统计子串中的唯一字符:练补充套路与扩展变形。
- 467. 环绕字符串中唯一的子字符串:练补充套路与扩展变形。
合法子序列 DP
- 2501. 数组中最长的方波:练补充套路与扩展变形。
- 1218. 最长定差子序列:练补充套路与扩展变形。
- 2826. 将三个组排序:练补充套路与扩展变形;做法不止一种。
- 1027. 最长等差数列:练补充套路与扩展变形。
- 2370. 最长理想子序列:练补充套路与扩展变形。
- 873. 最长的斐波那契子序列的长度:练补充套路与扩展变形。
- 3686. 稳定子序列的数量:练补充套路与扩展变形。
- 3202. 找出有效子序列的最大长度 II:练补充套路与扩展变形。
- 446. 等差数列划分 II - 子序列:练补充套路与扩展变形。
- 3811. 交替按位异或分割的数目:练补充套路与扩展变形;做法不止一种。
- 3351. 好子序列的元素之和:练补充套路与扩展变形。
- 3041. 修改数组后最大化数组中的连续元素数目:练补充套路与扩展变形。
- 3409. 最长相邻绝对差递减子序列:练补充套路与扩展变形。
- 3098. 求出所有子序列的能量和:练补充套路与扩展变形。
- 2901. 最长相邻不相等子序列 II:练补充套路与扩展变形;做到线性复杂度。
- 3299. 连续子序列的和:练补充套路与扩展变形,会员题。
- 1048. 最长字符串链:练补充套路与扩展变形。
- 940. 不同的子序列 II:练补充套路与扩展变形。
- 1987. 不同的好子序列数目:练补充套路与扩展变形;思考方式同 940 题。
- 730. 统计不同回文子序列:练补充套路与扩展变形。
子矩形 DP
- 3148. 矩阵中的最大得分:练补充套路与扩展变形。
- 221. 最大正方形:练补充套路与扩展变形。
- 1277. 统计全为 1 的正方形子矩阵:练补充套路与扩展变形。
- 2088. 统计农场中肥沃金字塔的数目:练补充套路与扩展变形。
- 3197. 包含所有 1 的最小矩形面积 II:练补充套路与扩展变形;做到 O(mn)。
多维 DP
- 2222. 选择建筑的方案数:练补充套路与扩展变形。
- 2826. 将三个组排序:练补充套路与扩展变形;做法不止一种。
- 2400. 恰好移动 k 步到达某一位置的方法数目:练补充套路与扩展变形。
- 1262. 可被三整除的最大和:练补充套路与扩展变形。
- 3780. 能被 3 整除的三元组最大和:练补充套路与扩展变形。
- 3332. 旅客可以得到的最多点数:练补充套路与扩展变形。
- 3176. 求出最长好子序列 I:练补充套路与扩展变形。
- 1269. 停在原地的方案数:练补充套路与扩展变形。
- 3250. 单调数组对的数目 I:练补充套路与扩展变形。
- 3218. 切蛋糕的最小总开销 I:练补充套路与扩展变形。
- 3122. 使矩阵满足条件的最少操作次数:练补充套路与扩展变形。
- 576. 出界的路径数:练补充套路与扩展变形。
- 403. 青蛙过河:练补充套路与扩展变形。
- 3725. 统计每一行选择互质整数的方案数:练补充套路与扩展变形。
- 1223. 掷骰子模拟:练补充套路与扩展变形。
- 1320. 二指输入的的最小距离:练补充套路与扩展变形。
- 3366. 最小数组和:练补充套路与扩展变形。
- 1575. 统计所有可行路径:练补充套路与扩展变形。
- 3154. 到达第 K 级台阶的方案数:练补充套路与扩展变形。
- 2318. 不同骰子序列的数目:练补充套路与扩展变形。
- 3469. 移除所有数组元素的最小代价:练补充套路与扩展变形。
- 2746. 字符串连接删减字母:练补充套路与扩展变形。
- 1444. 切披萨的方案数:练补充套路与扩展变形。
- 3320. 统计能获胜的出招序列数:练补充套路与扩展变形。
- 3429. 粉刷房子 IV:练补充套路与扩展变形。
- 2896. 执行操作使两个字符串相等:练补充套路与扩展变形。
- 1420. 生成数组:练补充套路与扩展变形。
- 3193. 统计逆序对的数目:练补充套路与扩展变形。
- 2312. 卖木头块:练补充套路与扩展变形。
- 3177. 求出最长好子序列 II:练补充套路与扩展变形。
- 1884. 鸡蛋掉落-两枚鸡蛋:练补充套路与扩展变形。
- 887. 鸡蛋掉落:练补充套路与扩展变形。
- 920. 播放列表的数量:练补充套路与扩展变形。
- 514. 自由之路:练补充套路与扩展变形;做到 O(nm)。
- 3336. 最大公约数相等的子序列数量:练补充套路与扩展变形。
- 1388. 3n 块披萨:练补充套路与扩展变形。
- 903. DI 序列的有效排列:练补充套路与扩展变形。
- 1900. 最佳运动员的比拼回合:练补充套路与扩展变形。
- 1531. 压缩字符串 II:练补充套路与扩展变形。
- 1883. 准时抵达会议现场的最小跳过休息次数:练补充套路与扩展变形。
- 964. 表示数字的最少运算符:练补充套路与扩展变形。
- 1787. 使所有区间的异或结果为零:练补充套路与扩展变形。
- 3509. 最大化交错和为 K 的子序列乘积:练补充套路与扩展变形。
- 3441. 变成好标题的最少代价:练补充套路与扩展变形。
- 2060. 同源字符串检测:练补充套路与扩展变形。
- 2809. 使数组和小于等于 x 的最少时间:练补充套路与扩展变形。
- 3003. 执行操作后的最大分割数量:练补充套路与扩展变形。
- 3225. 网格图操作后的最大分数:练补充套路与扩展变形。
- LCP 57. 打地鼠:练补充套路与扩展变形。
- LCP 43. 十字路口的交通:练补充套路与扩展变形。
- LCP 65. 舒适的湿度:练补充套路与扩展变形。
- LCP 36. 最多牌组数:练补充套路与扩展变形。
- LCP 38. 守卫城堡:练补充套路与扩展变形。
- 256. 粉刷房子:练补充套路与扩展变形,会员题。
- 265. 粉刷房子 II:练补充套路与扩展变形,会员题。
- 3339. 查找 K 偶数数组的数量:练补充套路与扩展变形,会员题。
- 568. 最大休假天数:练补充套路与扩展变形,会员题。
- 1692. 计算分配糖果的不同方式:练补充套路与扩展变形,会员题。
- 2143. 在两个数组的区间中选取数字:练补充套路与扩展变形,会员题。
- 3269. 构建两个递增数组:练补充套路与扩展变形,会员题。
- 638. 大礼包:练补充套路与扩展变形。
计数 DP
- 1079. 活字印刷:练补充套路与扩展变形;做到 O(n2)。
- 1866. 恰有 K 根木棍可以看到的排列数目:练补充套路与扩展变形。
- 3317. 安排活动的方案数:练补充套路与扩展变形。
- 3343. 统计平衡排列的数目:练补充套路与扩展变形。
- 3539. 魔法序列的数组乘积之和:练补充套路与扩展变形。
区间 DP
最长回文子序列
- 516. 最长回文子序列:练区间 DP 转移。
- 1312. 让字符串成为回文串的最少插入次数:练区间 DP 转移。
- 3472. 至多 K 次操作后的最长回文子序列:练区间 DP 转移。
- 1771. 由子序列构造的最长回文串的长度:练区间 DP 转移。
- 730. 统计不同回文子序列:练区间 DP 转移。
- 1682. 最长回文子序列 II:练区间 DP 转移,会员题。
- 1216. 验证回文串 III:练区间 DP 转移,会员题。
- 1246. 删除回文子数组:练区间 DP 转移,会员题。
区间 DP
- 5. 最长回文子串:练区间 DP 转移。
- 647. 回文子串:练区间 DP 转移。
- 3040. 相同分数的最大操作数目 II:练区间 DP 转移。
- 1130. 叶值的最小代价生成树:练区间 DP 转移。
- 96. 不同的二叉搜索树:练区间 DP 转移。
- 375. 猜数字大小 II:练区间 DP 转移。
- 1770. 执行乘法运算的最大分数:练区间 DP 转移。
- 1547. 切棍子的最小成本:练区间 DP 转移。
- 1039. 多边形三角剖分的最低得分:练区间 DP 转移。
- 1000. 合并石头的最低成本:练区间 DP 转移。
- 2019. 解出数学表达式的学生分数:练区间 DP 转移。
- 面试题 08.14. 布尔运算:练区间 DP 转移。
- 3563. 移除相邻字符后字典序最小的字符串:练区间 DP 转移。
- 3277. 查询子数组最大异或值:练区间 DP 转移。
- 87. 扰乱字符串:练区间 DP 转移。
- 312. 戳气球:练区间 DP 转移。
- 664. 奇怪的打印机:练区间 DP 转移。
- 546. 移除盒子:练区间 DP 转移;同 CF1107E。
- 471. 编码最短长度的字符串:练区间 DP 转移,会员题。
- 3018. 可处理的最大删除操作数 I:练区间 DP 转移,会员题。
状态压缩 DP(状压 DP)
排列型状压 DP ① 相邻无关
- 教你一步步思考状压 DP:从记忆化搜索到递推:练位压缩状态设计。
- 526. 优美的排列:练位压缩状态设计。
- 3376. 破解锁的最少时间 I:练位压缩状态设计。
- 1879. 两个数组最小的异或值之和:练位压缩状态设计。
- 2850. 将石头分散到网格图的最少移动次数:练位压缩状态设计。
- 1947. 最大兼容性评分和:练位压缩状态设计。
- 1799. N 次操作后的最大分数和:练位压缩状态设计。
- 3533. 判断连接可整除性:练位压缩状态设计。
- 3530. 有向无环图中合法拓扑排序的最大利润:练位压缩状态设计。
- 2172. 数组的最大与和:练位压缩状态设计。
- 2992. 自整除排列的数量:练位压缩状态设计,会员题。
- 2403. 杀死所有怪物的最短时间:练位压缩状态设计;会员题同 3376 题。
- 1066. 校园自行车分配 II:练位压缩状态设计,会员题。
排列型状压 DP ② 相邻相关
- 2741. 特别的排列:练位压缩状态设计。
- 996. 平方数组的数目:练位压缩状态设计。
- 1681. 最小不兼容性:练位压缩状态设计。
- 3615. 图中的最长回文路径:练位压缩状态设计。
- 3283. 吃掉所有兵需要的最多移动次数:练位压缩状态设计。
- 3149. 找出分数最低的排列:练位压缩状态设计。
旅行商问题(TSP)
- 943. 最短超级串:练位压缩状态设计。
- 847. 访问所有节点的最短路径:练位压缩状态设计。
- LCP 13. 寻宝:练位压缩状态设计。
- 2247. K 条高速公路的最大旅行费用:练位压缩状态设计,会员题。
- 3568. 清理教室的最少移动:练位压缩状态设计。
- 864. 获取所有钥匙的最短路径:练位压缩状态设计。
子集状压 DP
- 2305. 公平分发饼干:练位压缩状态设计。
- 1986. 完成任务的最少工作时间段:练位压缩状态设计。
- 3670. 没有公共位的整数最大乘积:练位压缩状态设计。
- 1723. 完成所有工作的最短时间:练位压缩状态设计。
- 1655. 分配重复整数:练位压缩状态设计。
- 3444. 使数组包含目标值倍数的最少增量:练位压缩状态设计。
- 3575. 最大好子树分数:练位压缩状态设计。
- 1349. 参加考试的最大学生数:练位压缩状态设计。
- 1681. 最小不兼容性:练位压缩状态设计。
- 3801. 合并有序列表的最小成本:练位压缩状态设计。
- 2572. 无平方子集计数:练位压缩状态设计。
- 1994. 好子集的数目:练位压缩状态设计。
- 1494. 并行课程 II:练位压缩状态设计。
- LCP 04. 覆盖:练位压缩状态设计。
- LCP 53. 守护太空城:练位压缩状态设计。
- 465. 最优账单平衡:练位压缩状态设计,会员题。
- 2152. 穿过所有点的所需最少直线数量:练位压缩状态设计,会员题。
- 3594. 所有人渡河所需的最短时间:练位压缩状态设计。
轮廓线 DP
- 1411. 给 N x 3 网格图涂色的方案数:练位压缩状态设计。
- 1931. 用三种不同颜色为网格涂色:练位压缩状态设计。
- 1349. 参加考试的最大学生数:练位压缩状态设计。
- 1659. 最大化网格幸福感:练位压缩状态设计。
- 980. 不同路径 III:练位压缩状态设计。
- LCP 04. 覆盖:练位压缩状态设计。
- LCP 76. 魔法棋盘:练位压缩状态设计。
- 2184. 建造坚实的砖墙的方法数:练位压缩状态设计,会员题。
- 756. 金字塔转换矩阵:练位压缩状态设计。
SOS DP
- 3670. 没有公共位的整数最大乘积:练位压缩状态设计。
- 2002. 两个回文子序列长度的最大乘积:练位压缩状态设计。
- 2044. 统计按位或能得到最大值的子集数目:练位压缩状态设计。
- 2732. 找到矩阵中的好子集:练位压缩状态设计。
- 3757. 有效子序列的数量:练位压缩状态设计。
其他状压 DP
- 473. 火柴拼正方形:练位压缩状态设计。
- 698. 划分为k个相等的子集:练位压缩状态设计。
- 1125. 最小的必要团队:练位压缩状态设计。
- 1434. 每个人戴不同帽子的方案数:练位压缩状态设计。
- 464. 我能赢吗:练位压缩状态设计。
- 691. 贴纸拼词:练位压缩状态设计。
- 3276. 选择矩阵中单元格的最大得分:练位压缩状态设计。
- 1595. 连通两组点的最小成本:练位压缩状态设计。
- 1815. 得到新鲜甜甜圈的最多组数:练位压缩状态设计。
- LCP 69. Hello LeetCode!:练位压缩状态设计。
- LCP 82. 万灵之树:练位压缩状态设计。
- 351. 安卓系统手势解锁:练位压缩状态设计,会员题。
数位 DP
统计合法元素的数目
- 3747. 统计移除零后不同整数的数目:练按位限制与记忆化搜索。
- 2719. 统计整数数目:练按位限制与记忆化搜索。
- 1399. 统计最大组的数目:练按位限制与记忆化搜索;非暴力做法。
- 1742. 盒子中小球的最大数量:练按位限制与记忆化搜索;非暴力做法。
- 788. 旋转数字:练按位限制与记忆化搜索;非暴力做法。
- 902. 最大为 N 的数字组合:练按位限制与记忆化搜索。
- 600. 不含连续 1 的非负整数:练按位限制与记忆化搜索。
- 2376. 统计特殊整数:练按位限制与记忆化搜索。
- 357. 统计各位数字都不同的数字个数:练按位限制与记忆化搜索;同 2376 题。
- 3791. 给定范围内平衡整数的数目:练按位限制与记忆化搜索。
- 1012. 至少有 1 位重复的数字:练按位限制与记忆化搜索。
- 3519. 统计逐位非递减的整数:练按位限制与记忆化搜索。
- 2827. 范围中美丽整数的数目:练按位限制与记忆化搜索。
- 2999. 统计强大整数的数目:练按位限制与记忆化搜索。
- 2801. 统计范围内的步进数字数目:练按位限制与记忆化搜索。
- 2843. 统计对称整数的数目:练按位限制与记忆化搜索;非暴力做法。
- 3352. 统计小于 N 的 K 可约简整数:练按位限制与记忆化搜索。
- 3621. 位计数深度为 K 的整数数目 I:练按位限制与记忆化搜索;同 3352 题。
- 3490. 统计美丽整数的数目:练按位限制与记忆化搜索。
- 1397. 找到所有好字符串:练按位限制与记忆化搜索。
- 1215. 步进数:练按位限制与记忆化搜索,会员题。
- 1067. 范围内的数字计数:练按位限制与记忆化搜索,会员题。
- 3032. 统计各位数字都不同的数字个数 II:练按位限制与记忆化搜索,会员题。
- 3704. 统计和为 N 的无零数对:练按位限制与记忆化搜索。
统计合法元素的价值总和
- 233. 数字 1 的个数:练按位限制与记忆化搜索。
- 面试题 17.06. 2 出现的次数:练按位限制与记忆化搜索。
- 3007. 价值和小于等于 K 的最大数字:练按位限制与记忆化搜索;做法不止一种。
- 3753. 范围内总波动值 II:练按位限制与记忆化搜索。
其他数位 DP
- 3677. 统计二进制回文数字的数目:练按位限制与记忆化搜索。
- 3348. 最小可整除数位乘积 II:练按位限制与记忆化搜索。
优化 DP
前缀和优化 DP
- 1871. 跳跃游戏 VII:练前缀统计与区间查询;也可以用滑动窗口优化。
- 2327. 知道秘密的人数:练前缀统计与区间查询;做到 O(n)。
- 3699. 锯齿形数组的总数 I:练前缀统计与区间查询。
- 1997. 访问完所有房间的第一天:练前缀统计与区间查询。
- 629. K 个逆序对数组:练前缀统计与区间查询。
- 3193. 统计逆序对的数目:练前缀统计与区间查询。
- 3473. 长度至少为 M 的 K 个子数组之和:练前缀统计与区间查询。
- 3251. 单调数组对的数目 II:练前缀统计与区间查询。
- 2478. 完美分割的方案数:练前缀统计与区间查询。
- 837. 新 21 点:练前缀统计与区间查询;也可以用滑动窗口优化。
- 3797. 统计在矩形格子里移动的路径数目:练前缀统计与区间查询。
- 3077. K 个不相交子数组的最大能量值:练前缀统计与区间查询。
- 3333. 找到初始输入字符串 II:练前缀统计与区间查询。
- 2902. 和带限制的子多重集合的数目:练前缀统计与区间查询。
- 1977. 划分数字的方案数:练前缀统计与区间查询。
- 3130. 找出所有稳定的二进制数组 II:练前缀统计与区间查询。
单调栈优化 DP
- 1335. 工作计划的最低难度:练维护单调性与贡献计算。
- 2866. 美丽塔 II:练维护单调性与贡献计算。
- 2617. 网格图中最少访问的格子数:练维护单调性与贡献计算。
- 2355. 你能拿走的最大图书数量:练维护单调性与贡献计算,会员题。
单调队列优化 DP
- 2944. 购买水果需要的最少金币数:练该小节核心套路;做到 O(n)。
- 1696. 跳跃游戏 VI:练该小节核心套路。
- 1425. 带限制的子序列和:练该小节核心套路。
- 3578. 统计极差最大为 K 的分割方式数:练该小节核心套路。
- 375. 猜数字大小 II:练该小节核心套路;做到 O(n2)。
- 1687. 从仓库到码头运输箱子:练该小节核心套路。
- 2463. 最小移动总距离:练该小节核心套路;做到 O(nm)(注:还有 O((n+m)log(n+m)) 的反悔贪心做法)。
- 3117. 划分数组得到最小的值之和:练该小节核心套路。
- 2945. 找到最大非递减数组的长度:练该小节核心套路。
- 2969. 购买水果需要的最少金币数 II:练该小节核心套路,会员题。
树状数组/线段树优化 DP
- 1626. 无矛盾的最佳球队:练前缀修改与查询。
- 2407. 最长递增子序列 II:练前缀修改与查询。
- 2770. 达到末尾下标所需的最大跳跃次数:练前缀修改与查询。
- 2926. 平衡子序列的最大和:练前缀修改与查询。
- 2547. 拆分数组的最小代价:练前缀修改与查询;做到 O(nlogn)。
- 3671. 子序列美丽值求和:练前缀修改与查询。
- 2916. 子数组不同元素数目的平方和 II:练前缀修改与查询。
字典树优化 DP
- 139. 单词拆分:练树遍历与树上递归。
- 2707. 字符串中的额外字符:练树遍历与树上递归。
- 面试题 17.13. 恢复空格:练树遍历与树上递归。
- 472. 连接词:练树遍历与树上递归。
- 2977. 转换字符串的最小成本 II:练树遍历与树上递归。
矩阵快速幂优化 DP
- 70:练该小节核心套路。
- 935:练该小节核心套路。
- 70. 爬楼梯:练该小节核心套路。
- 509. 斐波那契数:练该小节核心套路。
- 1137. 第 N 个泰波那契数:练该小节核心套路。
- 1220. 统计元音字母序列的数目:练该小节核心套路。
- 552. 学生出勤记录 II:练该小节核心套路。
- 935. 骑士拨号器:练该小节核心套路。
- 790. 多米诺和托米诺平铺:练该小节核心套路。
- 1411. 给 N x 3 网格图涂色的方案数:练该小节核心套路。
- 1931. 用三种不同颜色为网格涂色:练该小节核心套路。
- 3337. 字符串转换后的长度 II:练该小节核心套路。
- 3700. 锯齿形数组的总数 II:练该小节核心套路。
- 2851. 字符串转换:练该小节核心套路。
- 2912. 在网格上移动到目的地的方法数:练该小节核心套路,会员题。
斜率优化 DP
- 3826. 最小分割分数:练该小节核心套路。
- 3494. 酿造药水需要的最少总时间:练该小节核心套路。
- 3500. 将数组分割为子数组的最小代价:练该小节核心套路。
- 3693. 爬楼梯 II:练该小节核心套路。
WQS 二分优化 DP
- 188. 买卖股票的最佳时机 IV:练该小节核心套路。
- 3573. 买卖股票的最佳时机 V:练该小节核心套路。
- 2209. 用地毯覆盖后的最少白色砖块:练该小节核心套路。
- 3826. 最小分割分数:练该小节核心套路。
- 3743. 循环划分的最大得分:练该小节核心套路。
其他优化 DP
- 3654. 删除可整除和后的最小数组和:练补充套路与扩展变形。
- 1937. 扣分后的最大得分:练补充套路与扩展变形。
- 2713. 矩阵中严格递增的单元格数:练补充套路与扩展变形。
- 3651. 带传送的最小路径成本:练补充套路与扩展变形。
- 2318. 不同骰子序列的数目:练补充套路与扩展变形。
- 3181. 执行操作可获得的最大总奖励 II:练补充套路与扩展变形。
- 2267. 检查是否有合法括号字符串路径:练补充套路与扩展变形。
- 3213. 最小代价构造字符串:练补充套路与扩展变形。
- 3292. 形成目标字符串需要的最少字符串数 II:练补充套路与扩展变形。
- 3743. 循环划分的最大得分:练补充套路与扩展变形。
- LCP 14. 切分数组:练补充套路与扩展变形。
- LCP 59. 搭桥过河:练补充套路与扩展变形。
- 2263. 数组变为有序的最小操作次数:练补充套路与扩展变形;会员题Slope Trick。
树形 DP
树的直径
- 543. 二叉树的直径:练树上状态转移。
- 687. 最长同值路径:练树上状态转移。
- 124. 二叉树中的最大路径和:练树上状态转移。
- 2385. 感染二叉树需要的总时间:练树上状态转移。
- 2246. 相邻字符不同的最长路径:练树上状态转移。
- 3203. 合并两棵树后的最小直径:练树上状态转移。
- 1617. 统计子树中城市之间最大距离:练树上状态转移。
- 2538. 最大价值和与最小价值和的差值:练树上状态转移。
- 1522. N 叉树的直径:练树上状态转移,会员题。
- 1245. 树的直径:练树上状态转移,会员题。
- 549. 二叉树最长连续序列 II:练树上状态转移,会员题。
- 3372. 连接两棵树后最大目标节点数目 I:练树上状态转移。
树上最大独立集
- 337. 打家劫舍 III:练树上状态转移。
- 2646. 最小化旅行的价格总和:练树上状态转移。
- 3544. 子树反转和:练树上状态转移。
- 2378. 选择边来最大化树的得分:练树上状态转移,会员题。
树上最小支配集
- 968. 监控二叉树:练树上状态转移。
换根 DP
- 834. 树中距离之和:练树上状态转移。
- 2581. 统计可能的树根数目:练树上状态转移。
- 3772. 子图的最大得分:练树上状态转移。
- 2858. 可以到达每一个节点的最少边反转次数:练树上状态转移。
- 310. 最小高度树:练树上状态转移;也可以用拓扑排序做。
- 3241. 标记所有节点需要的时间:练树上状态转移。
- 3372. 连接两棵树后最大目标节点数目 I:练树上状态转移;做到 O((n+m)k),解决 n 和 m 很大但 k 很小的场景。
其他树形 DP
- 2925. 在树上执行操作以后得到的最大分数:练树上状态转移。
- 3068. 最大节点价值之和:练树上状态转移。
- 2920. 收集所有金币可获得的最大积分:练树上状态转移。
- 3575. 最大好子树分数:练树上状态转移。
- 3562. 折扣价交易股票的最大利润:练树上状态转移。
- 1916. 统计为蚁群构筑房间的不同顺序:练树上状态转移。
- 3367. 移除边之后的权重最大和:练树上状态转移。
- LCP 10. 二叉树任务调度:练树上状态转移。
- LCP 34. 二叉树染色:练树上状态转移。
- LCP 64. 二叉树灯饰:练树上状态转移。
- 2313. 二叉树中得到结果所需的最少翻转次数:练树上状态转移,会员题。
图 DP
- 3243. 新增道路查询后的最短距离 I:练该小节核心套路。
- 787. K 站中转内最便宜的航班:练该小节核心套路。
- 1786. 从第一个节点出发到最后一个节点的受限路径数:练该小节核心套路。
- 2050. 并行课程 III:练该小节核心套路。
- 3620. 恢复网络路径:练该小节核心套路。
- 1976. 到达目的地的方案数:练该小节核心套路。
- 3543. K 条边路径的最大边权和:练该小节核心套路。
- 1857. 有向图中最大颜色值:练该小节核心套路。
- 1928. 规定时间内到达终点的最小花费:练该小节核心套路。
- 913. 猫和老鼠:练该小节核心套路。
- 1728. 猫和老鼠 II:练该小节核心套路。
- LCP 07. 传递信息:练该小节核心套路。
- 1548. 图中最相似的路径:练该小节核心套路,会员题。
博弈 DP
- 1025. 除数博弈:练胜负状态分析。
- 877. 石子游戏:练胜负状态分析。
- 486. 预测赢家:练胜负状态分析。
- 1510. 石子游戏 IV:练胜负状态分析。
- 1690. 石子游戏 VII:练胜负状态分析。
- 1406. 石子游戏 III:练胜负状态分析。
- 1140. 石子游戏 II:练胜负状态分析。
- 1563. 石子游戏 V:练胜负状态分析。
- 464. 我能赢吗:练胜负状态分析。
- 1872. 石子游戏 VIII:练胜负状态分析。
- 913. 猫和老鼠:练胜负状态分析。
- 1728. 猫和老鼠 II:练胜负状态分析。
- 294. 翻转游戏 II:练胜负状态分析,会员题。
概率/期望 DP
- 688. 骑士在棋盘上的概率:练该小节核心套路。
- 837. 新 21 点:练该小节核心套路。
- 1467. 两个盒子中球的颜色数相同的概率:练该小节核心套路。
- 808. 分汤:练该小节核心套路。
- LCR 185. 统计结果概率:练该小节核心套路。
- 九坤-04. 筹码游戏:练该小节核心套路。
- 1230. 抛掷硬币:练该小节核心套路,会员题。
专题:输出具体方案(打印方案)
- 368. 最大整除子集:练该小节核心套路。
- 1363. 形成三的最大倍数:练该小节核心套路。
- 1449. 数位成本和为目标值的最大数字:练该小节核心套路。
- 1092. 最短公共超序列:练该小节核心套路。
- 943. 最短超级串:练该小节核心套路。
- 1125. 最小的必要团队:练该小节核心套路。
- 3533. 判断连接可整除性:练该小节核心套路。
- 3260. 找出最大的 N 位 K 回文数:练该小节核心套路。
- 3149. 找出分数最低的排列:练该小节核心套路。
- 3441. 变成好标题的最少代价:练该小节核心套路。
- 3348. 最小可整除数位乘积 II:练该小节核心套路。
- 656. 金币路径:练该小节核心套路;会员题字典序。
- 471. 编码最短长度的字符串:练该小节核心套路,会员题。
专题:前后缀分解
- 724. 寻找数组的中心下标:练该小节核心套路;做到 O(n)。
- 1991. 找到数组的中间位置:练该小节核心套路;同 724 题。
- 3707. 相等子字符串分数:练该小节核心套路。
- 3788. 分割的最大得分:练该小节核心套路。
- 2270. 分割数组的方案数:练该小节核心套路。
- 2256. 最小平均差:练该小节核心套路。
- 1422. 分割字符串的最大得分:练该小节核心套路;做到 O(n)。
- 238. 除了自身以外数组的乘积:练该小节核心套路。
- 1493. 删掉一个元素以后全为 1 的最长子数组:练该小节核心套路。
- 845. 数组中的最长山脉:练该小节核心套路;也可以分组循环。
- 2012. 数组美丽值求和:练该小节核心套路。
- 2909. 元素和最小的山形三元组 II:练该小节核心套路。
- 2483. 商店的最少代价:练该小节核心套路。
- 1525. 字符串的好分割数目:练该小节核心套路。
- 3583. 统计特殊三元组:练该小节核心套路。
- 3354. 使数组元素等于零:练该小节核心套路;做到 O(n)。
- 1930. 长度为 3 的不同回文子序列:练该小节核心套路。
- 2780. 合法分割的最小下标:练该小节核心套路。
- 2874. 有序三元组中的最大值 II:练该小节核心套路。
- 1664. 生成平衡数组的方案数:练该小节核心套路。
- 123. 买卖股票的最佳时机 III:练该小节核心套路。
- 3698. 分割数组得到最小绝对差:练该小节核心套路。
- 3598. 相邻字符串之间的最长公共前缀:练该小节核心套路。
- 2222. 选择建筑的方案数:练该小节核心套路。
- 1031. 两个无重叠子数组的最大和:练该小节核心套路。
- 689. 三个无重叠子数组的最大和:练该小节核心套路。
- 2420. 找到所有好下标:练该小节核心套路。
- 2100. 适合野炊的日子:练该小节核心套路。
- 926. 将字符串翻转到单调递增:练该小节核心套路。
- 334. 递增的三元子序列:练该小节核心套路。
- 1653. 使字符串平衡的最少删除次数:练该小节核心套路。
- 1186. 删除一次得到子数组最大和:练该小节核心套路。
- 3738. 替换至多一个元素后最长非递减子数组:练该小节核心套路。
- 42. 接雨水:练该小节核心套路。
- 2711. 对角线上不同值的数量差:练该小节核心套路;做到 O(mn)。
- 1477. 找两个和为目标值且不重叠的子数组:练该小节核心套路。
- 2680. 最大或值:练该小节核心套路。
- 1671. 得到山形数组的最少删除次数:练该小节核心套路。
- 2906. 构造乘积矩阵:练该小节核心套路。
- 3334. 数组的最大因子得分:练该小节核心套路;非暴力做法。
- 3830. 移除至多一个元素后的最长交替子数组:练该小节核心套路。
- 2167. 移除所有载有违禁货物车厢所需的最少时间:练该小节核心套路。
- 2484. 统计回文子序列数目:练该小节核心套路。
- 2163. 删除元素后和的最小差值:练该小节核心套路。
- 2565. 最少得分子序列:练该小节核心套路。
- 1995. 统计特殊四元组:练该小节核心套路。
- 2552. 统计上升四元组:练该小节核心套路。
- 3302. 字典序最小的合法序列:练该小节核心套路。
- 3404. 统计特殊子序列的数目:练该小节核心套路。
- 3303. 第一个几乎相等子字符串的下标:练该小节核心套路。
- 3287. 求出数组中最大序列值:练该小节核心套路。
- 3257. 放三个车的价值之和最大 II:练该小节核心套路。
- 3410. 删除所有值为某个元素后的最大子数组和:练该小节核心套路。
- 3003. 执行操作后的最大分割数量:练该小节核心套路。
- 487. 最大连续 1 的个数 II:练该小节核心套路,会员题。
- 1746. 经过一次操作后的最大子数组和:练该小节核心套路,会员题。
- 121. 买卖股票的最佳时机:练该小节核心套路。
专题:把 X 变成 Y
- 397. 整数替换:练该小节核心套路。
- 2998. 使 X 和 Y 相等的最少操作次数:练该小节核心套路。
- 2059. 转化数字的最小运算数:练该小节核心套路。
- 991. 坏了的计算器:练该小节核心套路。
- 1553. 吃掉 N 个橘子的最少天数:练该小节核心套路。
- 3377. 使两个整数相等的数位操作:练该小节核心套路。
专题:跳跃游戏
- 1306. 跳跃游戏 III:练该小节核心套路。
- 2770. 达到末尾下标所需的最大跳跃次数:练该小节核心套路。
- 403. 青蛙过河:练该小节核心套路。
- 1340. 跳跃游戏 V:练该小节核心套路。
- 1871. 跳跃游戏 VII:练该小节核心套路。
- 1696. 跳跃游戏 VI:练该小节核心套路。
- 975. 奇偶跳:练该小节核心套路。
- 1654. 到家的最少跳跃次数:练该小节核心套路。
- LCP 09. 最小跳跃次数:练该小节核心套路。
- LCP 20. 快速公交:练该小节核心套路。
- 656. 金币路径:练该小节核心套路,会员题。
- 2297. 跳跃游戏 VIII:练该小节核心套路,会员题。
其他
- 1387. 将整数按权重排序:练补充套路与扩展变形。
- 823. 带因子的二叉树:练补充套路与扩展变形。
- 2930. 重新排列后包含指定子字符串的字符串数目:练补充套路与扩展变形。
- 1896. 反转表达式值的最少操作次数:练补充套路与扩展变形。
常用数据结构
零、常用枚举技巧
枚举右,维护左
基础
- 1. 两数之和:练基础模板与边界处理。
- 1512. 好数对的数目:练基础模板与边界处理;相当于两数之差等于 0。
- 2441. 与对应负数同时存在的最大正整数:练基础模板与边界处理;相当于两数之和等于 0。
- 121. 买卖股票的最佳时机:练基础模板与边界处理。
- 2016. 增量元素之间的最大差值:练基础模板与边界处理。
- 624. 数组列表中的最大距离:练基础模板与边界处理。
- 2342. 数位和相等数对的最大和:练基础模板与边界处理。
- 1128. 等价多米诺骨牌对的数量:练基础模板与边界处理。
- 1679. K 和数对的最大数目:练基础模板与边界处理。
- 面试题 16.24. 数对和:练基础模板与边界处理。
- 219. 存在重复元素 II:练基础模板与边界处理。
- 2260. 必须拿起的最小连续卡牌数:练基础模板与边界处理。
- 2001. 可互换矩形的组数:练基础模板与边界处理。
- 2815. 数组中的最大数对和:练基础模板与边界处理;非暴力做法。
- 3623. 统计梯形的数目 I:练基础模板与边界处理。
- 2364. 统计坏数对的数目:练基础模板与边界处理。
- 3805. 统计凯撒加密对数目:练基础模板与边界处理。
- 3371. 识别数组中的最大异常值:练基础模板与边界处理。
- 3761. 镜像对之间最小绝对距离:练基础模板与边界处理。
- 1014. 最佳观光组合:练基础模板与边界处理。
- 1814. 统计一个数组中好对子的数目:练基础模板与边界处理。
- 3584. 子序列首尾元素的最大乘积:练基础模板与边界处理。
- 2905. 找出满足差值条件的下标 II:练基础模板与边界处理。
进阶
- 1010. 总持续时间可被 60 整除的歌曲:练常见变形与综合运用。
- 3185. 构成整天的下标对数目 II:练常见变形与综合运用;同 1010 题。
- 2748. 美丽下标对的数目:练常见变形与综合运用。
- 2506. 统计相似字符串对的数目:练常见变形与综合运用。
- 2874. 有序三元组中的最大值 II:练常见变形与综合运用。
- 1497. 检查数组对是否可以被 k 整除:练常见变形与综合运用。
- 1031. 两个无重叠子数组的最大和:练常见变形与综合运用。
- 2555. 两个线段获得的最多奖品:练常见变形与综合运用。
- 1995. 统计特殊四元组:练常见变形与综合运用。
- 3404. 统计特殊子序列的数目:练常见变形与综合运用。
- 3267. 统计近似相等数对 II:练常见变形与综合运用。
- 3480. 删除一个冲突对后最大子数组数目:练常见变形与综合运用。
- 1214. 查找两棵二叉搜索树之和:练常见变形与综合运用,会员题。
- 2964. 可被整除的三元组数量:练常见变形与综合运用,会员题。
- 454. 四数相加 II:练常见变形与综合运用。
- 3027. 人员站位的方案数 II:练常见变形与综合运用。
- 3548. 等和矩阵分割 II:练常见变形与综合运用。
- 3713. 最长的平衡子串 I:练常见变形与综合运用。
枚举中间
- 2909. 元素和最小的山形三元组 II:练该小节核心套路。
- 3583. 统计特殊三元组:练该小节核心套路;也可以一次遍历。
- 1930. 长度为 3 的不同回文子序列:练该小节核心套路。
- 3128. 直角三角形:练该小节核心套路。
- 2874. 有序三元组中的最大值 II:练该小节核心套路;也可以一次遍历。
- 447. 回旋镖的数量:练该小节核心套路。
- 456. 132 模式:练该小节核心套路。
- 3067. 在带权树网络中统计可连接服务器对数目:练该小节核心套路。
- 1534. 统计好三元组:练该小节核心套路;做到 O(n2)。
- 3455. 最短匹配子字符串:练该小节核心套路。
- 2242. 节点序列的最大得分:练该小节核心套路。
- 2867. 统计树中的合法路径数目:练该小节核心套路。
- 2552. 统计上升四元组:练该小节核心套路;做法不止一种。
- 3257. 放三个车的价值之和最大 II:练该小节核心套路。
- 3073. 最大递增三元组:练该小节核心套路,会员题。
遍历对角线
- 3446. 按对角线进行矩阵排序:练该小节核心套路。
- 2711. 对角线上不同值的数量差:练该小节核心套路。
- 1329. 将矩阵按对角线排序:练该小节核心套路。
- 498. 对角线遍历:练该小节核心套路。
- 面试题 17.23. 最大黑方阵:练该小节核心套路;做到 O(n2logn),难度约 2800。
- 562. 矩阵中最长的连续1线段:练该小节核心套路,会员题。
前缀和
基础
- 303. 区域和检索 - 数组不可变:练前缀统计与区间查询。
- 3427. 变长子数组求和:练前缀统计与区间查询;做到 O(n)。
- 2559. 统计范围内的元音字符串数:练前缀统计与区间查询。
- 1310. 子数组异或查询:练前缀统计与区间查询。
- 3152. 特殊数组 II:练前缀统计与区间查询。
- 1749. 任意子数组和的绝对值的最大值:练前缀统计与区间查询。
- 53. 最大子数组和:练前缀统计与区间查询。
- 3652. 按策略买卖股票的最佳时机:练前缀统计与区间查询。
- 3361. 两个字符串的切换距离:练前缀统计与区间查询。
- 3511. 构造正数组:练前缀统计与区间查询,会员题。
- 3540. 访问所有房屋的最短时间:练前缀统计与区间查询,会员题。
- 1523. 在区间范围内统计奇数数目:练前缀统计与区间查询。
- 848. 字母移位:练前缀统计与区间查询。
前缀和与哈希表
- 560. 和为 K 的子数组:练前缀统计与区间查询。
- 930. 和相同的二元子数组:练前缀统计与区间查询;同 560 题。
- 1524. 和为奇数的子数组数目:练前缀统计与区间查询。
- 974. 和可被 K 整除的子数组:练前缀统计与区间查询。
- 523. 连续的子数组和:练前缀统计与区间查询。
- 2588. 统计美丽子数组数目:练前缀统计与区间查询。
- 525. 连续数组:练前缀统计与区间查询;和 1 个数相同的最长子数组。
- 面试题 17.05. 字母与数字:练前缀统计与区间查询;同 525 题。
- 3755. 最大平衡异或子数组的长度:练前缀统计与区间查询。
- 3026. 最大好子数组和:练前缀统计与区间查询。
- 1477. 找两个和为目标值且不重叠的子数组:练前缀统计与区间查询。
- 1546. 和为目标值且不重叠的非空子数组的最大数目:练前缀统计与区间查询。
- 1124. 表现良好的最长时间段:练前缀统计与区间查询。
- 3728. 边界与内部和相等的稳定子数组:练前缀统计与区间查询。
- 3381. 长度可被 K 整除的子数组的最大元素和:练前缀统计与区间查询。
- 2488. 统计中位数为 K 的子数组:练前缀统计与区间查询。
- 1590. 使数组和能被 P 整除:练前缀统计与区间查询。
- 2845. 统计趣味子数组的数目:练前缀统计与区间查询。
- 3739. 统计主要元素子数组数目 II:练前缀统计与区间查询。
- 1074. 元素和为目标值的子矩阵数量:练前缀统计与区间查询。
- 1442. 形成两个异或相等数组的三元组数目:练前缀统计与区间查询;做到 O(n)。
- 3714. 最长的平衡子串 II:练前缀统计与区间查询。
- 2025. 分割数组的最多方案数:练前缀统计与区间查询。
- 3729. 统计有序数组中可被 K 整除的子数组数量:练前缀统计与区间查询。
- 2949. 统计美丽子字符串 II:练前缀统计与区间查询。
- 325. 和等于 k 的最长子数组长度:练前缀统计与区间查询,会员题。
- 548. 将数组分割成和相等的子数组:练前缀统计与区间查询,会员题。
- 1983. 范围和相等的最宽索引对:练前缀统计与区间查询,会员题。
- 2489. 固定比率的子字符串数:练前缀统计与区间查询,会员题。
- 2031. 1 比 0 多的子数组个数:练前缀统计与区间查询;会员题做到 O(n)。
- 2950. 可整除子串的数量:练前缀统计与区间查询;会员题做到 O(kn),其中 k=9。。
- 3364. 最小正和子数组:练前缀统计与区间查询;非暴力做法。
- 363. 矩形区域不超过 K 的最大数值和:练前缀统计与区间查询。
- 3739. 统计主要元素子数组数目 II:练前缀统计与区间查询。
- 2031. 1 比 0 多的子数组个数:练前缀统计与区间查询;会员题有 O(n) 做法。
- 437. 路径总和 III:练前缀统计与区间查询。
距离和
- 1685. 有序数组中差绝对值之和:练前缀统计与区间查询。
- 2615. 等值距离和:练前缀统计与区间查询。
- 2602. 使数组元素全部相等的最少操作次数:练前缀统计与区间查询。
- 2968. 执行操作使频率分数最大:练前缀统计与区间查询。
- 1703. 得到连续 K 个 1 的最少相邻交换次数:练前缀统计与区间查询。
- 3086. 拾起 K 个 1 需要的最少行动次数:练前缀统计与区间查询。
- 3422. 将子数组元素变为相等所需的最小操作数:练前缀统计与区间查询,会员题。
状态压缩前缀和
- 1177. 构建回文串检测:练前缀统计与区间查询。
- 1371. 每个元音包含偶数次的最长子字符串:练前缀统计与区间查询。
- 1542. 找出最长的超赞子字符串:练前缀统计与区间查询。
- 1915. 最美子字符串的数目:练前缀统计与区间查询。
- 2791. 树中可以形成回文的路径数:练前缀统计与区间查询。
进阶
- 2389. 和有限的最长子序列:练前缀统计与区间查询;非暴力做法。
- 3709. 设计考试分数记录器:练前缀统计与区间查询。
- 1895. 最大的幻方:练前缀统计与区间查询。
- 2055. 蜡烛之间的盘子:练前缀统计与区间查询。
- 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?:练前缀统计与区间查询。
- 1878. 矩阵中最大的三个菱形和:练前缀统计与区间查询。
- 3756. 连接非零数字并乘以其数字和 II:练前缀统计与区间查询。
- 1031. 两个无重叠子数组的最大和:练前缀统计与区间查询;做到 O(n)。
- 2245. 转角路径的乘积中最多能有几个尾随零:练前缀统计与区间查询。
- 1712. 将数组分成三个子数组的方案数:练前缀统计与区间查询。
- 1862. 向下取整数对和:练前缀统计与区间查询。
- 3748. 统计稳定子数组的数目:练前缀统计与区间查询。
- 2281. 巫师的总力量和:练前缀统计与区间查询。
- 3445. 奇偶频次间的最大差值 II:练前缀统计与区间查询。
- 2983. 回文串重新排列查询:练前缀统计与区间查询。
- 2955. 同端子串的数量:练前缀统计与区间查询,会员题。
- 1788. 最大化花园的美观度:练前缀统计与区间查询,会员题。
- 2819. 购买巧克力后的最小相对损失:练前缀统计与区间查询,会员题。
- 2300. 咒语和药水的成功对数:练前缀统计与区间查询。
- 1534. 统计好三元组:练前缀统计与区间查询。
二维前缀和
- 304. 二维区域和检索 - 矩阵不可变:练前缀统计与区间查询。
- 1314. 矩阵区域和:练前缀统计与区间查询。
- 3070. 元素和小于等于 k 的子矩阵的数目:练前缀统计与区间查询。
- 1738. 找出第 K 大的异或坐标值:练前缀统计与区间查询。
- 3212. 统计 X 和 Y 频数相等的子矩阵数量:练前缀统计与区间查询。
- 1292. 元素和小于等于阈值的正方形的最大边长:练前缀统计与区间查询。
- 3148. 矩阵中的最大得分:练前缀统计与区间查询。
差分
一维差分
基础
- 2848. 与车相交的点:练区间增量与还原。
- 1893. 检查是否区域内所有整数都被覆盖:练区间增量与还原。
- 1854. 人口最多的年份:练区间增量与还原。
- 面试题 16.10. 生存人数:练区间增量与还原;同 1854 题。
- 2960. 统计已测试设备:练区间增量与还原。
- 1094. 拼车:练区间增量与还原。
- 1109. 航班预订统计:练区间增量与还原。
- 3355. 零数组变换 I:练区间增量与还原。
- 370. 区间加法:练区间增量与还原,会员题。
进阶
- 3453. 分割正方形 I:练区间增量与还原。
- 2381. 字母移位 II:练区间增量与还原。
- 995. K 连续位的最小翻转次数:练区间增量与还原。
- 1589. 所有排列中的最大和:练区间增量与还原。
- 1526. 形成目标数组的子数组最少增加次数:练区间增量与还原。
- 3356. 零数组变换 II:练区间增量与还原;做法不止一种。
- 1943. 描述绘画结果:练区间增量与还原。
- 3224. 使差值相等的最少数组改动次数:练区间增量与还原;做法不止一种。
- 2327. 知道秘密的人数:练区间增量与还原;做到 O(n)。
- 2251. 花期内花的数目:练区间增量与还原。
- 2772. 使数组中的所有元素都等于零:练区间增量与还原。
- 3229. 使数组等于目标数组所需的最少操作次数:练区间增量与还原。
- 3529. 统计水平子串和垂直子串重叠格子的数目:练区间增量与还原。
- 798. 得分最高的最小轮调:练区间增量与还原。
- 3347. 执行操作后元素的最高频率 II:练区间增量与还原。
- 2528. 最大化城市的最小电量:练区间增量与还原。
- 1674. 使数组互补的最少操作次数:练区间增量与还原。
- 3362. 零数组变换 III:练区间增量与还原。
- 3655. 区间乘法查询后的异或 II:练区间增量与还原。
- 3017. 按距离统计房屋对数目 II:练区间增量与还原。
- 2021. 街上最亮的位置:练区间增量与还原,会员题。
- 2015. 每段建筑物的平均高度:练区间增量与还原,会员题。
- 2237. 计算街道上满足所需亮度的位置数量:练区间增量与还原,会员题。
- 3009. 折线图上的最大交点数量:练区间增量与还原,会员题。
- 3279. 活塞占据的最大总面积:练区间增量与还原,会员题。
- 56. 合并区间:练区间增量与还原。
- 57. 插入区间:练区间增量与还原。
- 732. 我的日程安排表 III:练区间增量与还原。
- 2406. 将区间分为最少组数:练区间增量与还原。
- 253. 会议室 II:练区间增量与还原,会员题。
- 759. 员工空闲时间:练区间增量与还原,会员题。
二维差分
- 2536. 子矩阵元素加 1:练区间增量与还原。
- 850. 矩形面积 II:练区间增量与还原。
- 2132. 用邮票贴满网格图:练区间增量与还原。
- LCP 74. 最强祝福力场:练区间增量与还原。
栈
基础
- 1441. 用栈操作构建数组:练基础模板与边界处理。
- 844. 比较含退格的字符串:练基础模板与边界处理。
- 682. 棒球比赛:练基础模板与边界处理。
- 2390. 从字符串中移除星号:练基础模板与边界处理。
- 1472. 设计浏览器历史记录:练基础模板与边界处理。
- 946. 验证栈序列:练基础模板与边界处理。
- 3412. 计算字符串的镜像分数:练基础模板与边界处理。
- 71. 简化路径:练基础模板与边界处理。
进阶
- 3170. 删除星号以后字典序最小的字符串:练常见变形与综合运用。
- 155. 最小栈:练常见变形与综合运用。
- 1381. 设计一个支持增量操作的栈:练常见变形与综合运用。
- 636. 函数的独占时间:练常见变形与综合运用。
- 2434. 使用机器人打印字典序最小的字符串:练常见变形与综合运用。
- 895. 最大频率栈:练常见变形与综合运用。
- 1172. 餐盘栈:练常见变形与综合运用。
- 2589. 完成所有任务的最少时间:练常见变形与综合运用;做法不止一种。
- 2524. 子数组的最大频率分数:练常见变形与综合运用,会员题。
- 716. 最大栈:练常见变形与综合运用,会员题。
邻项消除
- 2696. 删除子串后的字符串最小长度:练该小节核心套路。
- 1047. 删除字符串中的所有相邻重复项:练该小节核心套路。
- 1544. 整理字符串:练该小节核心套路。
- 3561. 移除相邻字符:练该小节核心套路。
- 1003. 检查替换后的词是否有效:练该小节核心套路。
- 2216. 美化数组的最少删除数:练该小节核心套路。
- 1209. 删除字符串中的所有相邻重复项 II:练该小节核心套路。
- 3703. 移除K-平衡子字符串:练该小节核心套路。
- 1717. 删除子字符串的最大得分:练该小节核心套路。
- 2197. 替换数组中的非互质数:练该小节核心套路。
- 735. 小行星碰撞:练该小节核心套路。
- 2751. 机器人碰撞:练该小节核心套路。
合法括号字符串(RBS)
- 20. 有效的括号:练该小节核心套路。
- 921. 使括号有效的最少添加:练该小节核心套路。
- 1021. 删除最外层的括号:练该小节核心套路。
- 1614. 括号的最大嵌套深度:练该小节核心套路。
- 1190. 反转每对括号间的子串:练该小节核心套路。
- 856. 括号的分数:练该小节核心套路。
- 1249. 移除无效的括号:练该小节核心套路。
- 1963. 使字符串平衡的最小交换次数:练该小节核心套路。
- 678. 有效的括号字符串:练该小节核心套路。
- 1111. 有效括号的嵌套深度:练该小节核心套路。
- 1541. 平衡括号字符串的最少插入次数:练该小节核心套路。
- 2116. 判断一个括号字符串是否有效:练该小节核心套路。
- 32. 最长有效括号:练该小节核心套路。
表达式解析
- 1006. 笨阶乘:练该小节核心套路。
- 150. 逆波兰表达式求值:练该小节核心套路。
- 394. 字符串解码:练该小节核心套路。
- 8. 字符串转换整数 (atoi):练该小节核心套路。
- 224. 基本计算器:练该小节核心套路。
- 227. 基本计算器 II:练该小节核心套路。
- 726. 原子的数量:练该小节核心套路。
- 1106. 解析布尔表达式:练该小节核心套路。
- 591. 标签验证器:练该小节核心套路。
- 736. Lisp 语法解析:练该小节核心套路。
- 1096. 花括号展开 II:练该小节核心套路。
- 1896. 反转表达式值的最少操作次数:练该小节核心套路。
- 65. 有效数字:练该小节核心套路。
- 770. 基本计算器 IV:练该小节核心套路。
- 439. 三元表达式解析器:练该小节核心套路,会员题。
- 3749. 计算有效表达式:练该小节核心套路,会员题。
- 772. 基本计算器 III:练该小节核心套路,会员题。
- 1087. 花括号展开:练该小节核心套路,会员题。
- 1597. 根据中缀表达式构造二叉表达式树:练该小节核心套路,会员题。
- 1628. 设计带解析函数的表达式树:练该小节核心套路,会员题。
对顶栈
- 2296. 设计一个文本编辑器:练该小节核心套路;也可以用 Splay 树。
队列
基础
- 933. 最近的请求次数:练基础模板与边界处理。
- 3829. 设计共享出行系统:练基础模板与边界处理。
- 950. 按递增顺序显示卡牌:练基础模板与边界处理。
- 649. Dota2 参议院:练基础模板与边界处理。
- 346. 数据流中的移动平均值:练基础模板与边界处理,会员题。
- 362. 敲击计数器:练基础模板与边界处理,会员题。
- 379. 电话目录管理系统:练基础模板与边界处理,会员题。
- 1429. 第一个唯一数字:练基础模板与边界处理,会员题。
- 2534. 通过门的时间:练基础模板与边界处理,会员题。
设计
- 1670. 设计前中后队列:练该小节核心套路。
- 3508. 设计路由器:练该小节核心套路。
- 225. 用队列实现栈:练该小节核心套路。
- 232. 用栈实现队列:练该小节核心套路。
- 622. 设计循环队列:练该小节核心套路。
- 641. 设计循环双端队列:练该小节核心套路。
双端队列
- 2810. 故障键盘:练该小节核心套路;做到 O(n)。
- 2071. 你可以安排的最多任务数目:练该小节核心套路。
单调队列
- 239. 滑动窗口最大值:练该小节核心套路。
- LCR 184. 设计自助结算系统:练该小节核心套路。
- 1438. 绝对差不超过限制的最长连续子数组:练该小节核心套路。
- 2762. 不间断子数组:练该小节核心套路;同 1438 题。
- 2398. 预算内的最多机器人数目:练该小节核心套路。
- 3589. 计数质数间隔平衡子数组:练该小节核心套路。
- 862. 和至少为 K 的最短子数组:练该小节核心套路。
- 1499. 满足不等式的最大值:练该小节核心套路。
堆(优先队列)
基础
- 1046. 最后一块石头的重量:练动态取极值。
- 3264. K 次乘运算后的最终数组 I:练动态取极值。
- 2558. 从数量最多的堆取走礼物:练动态取极值。
- 2336. 无限集中的最小数字:练动态取极值。
- 2530. 执行 K 次操作后的最大分数:练动态取极值。
- 3066. 超过阈值的最少操作数 II:练动态取极值。
- 1962. 移除石子使总数最小:练动态取极值。
- 703. 数据流中的第 K 大元素:练动态取极值。
- 3275. 第 K 近障碍物查询:练动态取极值。
- 1845. 座位预约管理系统:练动态取极值;你能做到复杂度与 n 无关吗?。
- 2208. 将数组和减半的最少操作次数:练动态取极值。
- 2233. K 次增加后的最大乘积:练动态取极值。
- 3296. 移山所需的最少秒数:练动态取极值。
- 1942. 最小未被占据椅子的编号:练动态取极值。
- 1801. 积压订单中的订单总数:练动态取极值。
- 2406. 将区间分为最少组数:练动态取极值。
- 3478. 选出和最大的 K 个元素:练动态取极值。
- 2462. 雇佣 K 位工人的总代价:练动态取极值。
- 1834. 单线程 CPU:练动态取极值。
- 1792. 最大平均通过率:练动态取极值。
- 1167. 连接木棍的最低费用:练动态取极值,会员题。
- 253. 会议室 II:练动态取极值;会员题经典题。
进阶
- 23. 合并 K 个升序链表:练动态取极值。
- 2931. 购买物品的最大开销:练动态取极值。
- 3781. 二进制交换后的最大分数:练动态取极值。
- 502. IPO:练动态取极值。
- 1705. 吃苹果的最大数目:练动态取极值。
- 778. 水位上升的泳池中游泳:练动态取极值。
- 1631. 最小体力消耗路径:练动态取极值。
- 1882. 使用服务器处理任务:练动态取极值。
- 1354. 多次求和构造目标数组:练动态取极值。
- 1353. 最多可以参加的会议数目:练动态取极值。
- 1235. 规划兼职工作:练动态取极值;做法不止一种。
- 632. 最小区间:练动态取极值;做法不止一种。
- 2542. 最大子序列的分数:练动态取极值。
- 1383. 最大的团队表现值:练动态取极值。
- 2402. 会议室 III:练动态取极值。
- 2503. 矩阵查询可获得的最大分数:练动态取极值。
- 2163. 删除元素后和的最小差值:练动态取极值。
- 857. 雇佣 K 名工人的最低成本:练动态取极值。
- 1606. 找到处理最多请求的服务器:练动态取极值。
- 1851. 包含每个查询的最小区间:练动态取极值。
- 407. 接雨水 II:练动态取极值。
- 2940. 找到 Alice 和 Bob 可以相遇的建筑:练动态取极值。
- 3399. 字符相同的最短子字符串 II:练动态取极值。
- 2589. 完成所有任务的最少时间:练动态取极值;做法不止一种。
- 3266. K 次乘运算后的最终数组 II:练动态取极值。
- 1675. 数组的最小偏移量:练动态取极值。
- 2617. 网格图中最少访问的格子数:练动态取极值。
- 2532. 过桥的时间:练动态取极值。
- LCP 33. 蓄水:练动态取极值。
- 1500. 设计文件分享系统:练动态取极值,会员题。
- 1199. 建造街区的最短时间:练动态取极值,会员题。
- 3506. 查找消除细菌菌株所需时间:练动态取极值,会员题。
- 1348. 推文计数:练动态取极值。
- 855. 考场就座:练动态取极值。
- 1912. 设计电影租借系统:练动态取极值。
第 K 小/大
- 264. 丑数 II:练值域二分与计数函数。
- 378. 有序矩阵中第 K 小的元素:练值域二分与计数函数。
- 23. 合并 K 个升序链表:练值域二分与计数函数。
- 373. 查找和最小的 K 对数字:练值域二分与计数函数。
- 1439. 有序矩阵中的第 k 个最小数组和:练值域二分与计数函数。
- 786. 第 K 个最小的质数分数:练值域二分与计数函数。
- 3691. 最大子数组总值 II:练值域二分与计数函数。
- 2386. 找出数组的第 K 大和:练值域二分与计数函数。
重排元素
- 984. 不含 AAA 或 BBB 的字符串:练动态取极值。
- 767. 重构字符串:练动态取极值。
- 1054. 距离相等的条形码:练动态取极值。
- 1405. 最长快乐字符串:练动态取极值。
- 3081. 替换字符串中的问号使分数最小:练动态取极值。
- 621. 任务调度器:练动态取极值。
- 358. K 距离间隔重排字符串:练动态取极值,会员题。
反悔堆
- LCP 30. 魔塔游戏:练动态取极值。
- 1642. 可以到达的最远建筑:练动态取极值。
- 630. 课程表 III:练动态取极值。
- 871. 最低加油次数:练动态取极值。
- 3362. 零数组变换 III:练动态取极值。
- 2813. 子序列最大优雅度:练动态取极值;也可以不用堆。
- 3049. 标记所有下标的最早秒数 II:练动态取极值。
- 3711. 不出现负余额的最大交易额:练动态取极值,会员题。
- 2599. 使前缀和数组非负:练动态取极值,会员题。
懒删除堆
- 2349. 设计数字容器系统:练动态取极值。
- 3607. 电网维护:练动态取极值。
- 2353. 设计食物评分系统:练动态取极值。
- 3092. 最高频率的 ID:练动态取极值。
- 3408. 设计任务管理器:练动态取极值。
- 2034. 股票价格波动:练动态取极值。
- 3815. 设计拍卖系统:练动态取极值。
- 1172. 餐盘栈:练动态取极值。
- 218. 天际线问题:练动态取极值。
- 3510. 移除最小数对使数组有序 II:练动态取极值。
- 3672. 子数组中加权众数的总和:练动态取极值,会员题。
- 3391. 设计一个高效的层跟踪三维二进制矩阵:练动态取极值,会员题。
- 716. 最大栈:练动态取极值,会员题。
对顶堆(滑动窗口第 K 小/大)
- 2102. 序列顺序查询:练值域二分与计数函数。
- 295. 数据流的中位数:练值域二分与计数函数。
- 480. 滑动窗口中位数:练值域二分与计数函数。
- 2653. 滑动子数组的美丽值:练值域二分与计数函数;非暴力做法。
- 1825. 求出 MK 平均值:练值域二分与计数函数。
- 3505. 使 K 个子数组内元素相等的最少操作数:练值域二分与计数函数。
- 3013. 将数组分成最小总代价的子数组 II:练值域二分与计数函数。
- 3321. 计算子数组的 x-sum II:练值域二分与计数函数。
- LCP 24. 数字游戏:练值域二分与计数函数。
- 3369. 设计数组统计跟踪器:练值域二分与计数函数,会员题。
- 3422. 将子数组元素变为相等所需的最小操作数:练值域二分与计数函数,会员题。
字典树(trie)
基础
- 208. 实现 Trie (前缀树):练树遍历与树上递归。
- 3597. 分割字符串:练树遍历与树上递归;非暴力做法。
- 648. 单词替换:练树遍历与树上递归。
- 720. 词典中最长的单词:练树遍历与树上递归。
- 2416. 字符串的前缀分数和:练树遍历与树上递归。
- 677. 键值映射:练树遍历与树上递归。
- 1268. 搜索推荐系统:练树遍历与树上递归。
- 1233. 删除子文件夹:练树遍历与树上递归。
- 820. 单词的压缩编码:练树遍历与树上递归。
- 2261. 含最多 K 个可整除元素的子数组:练树遍历与树上递归;做到 O(n2)。
- 1804. 实现 Trie (前缀树) II:练树遍历与树上递归,会员题。
- 2168. 每个数字的频率都相同的独特子字符串的数量:练树遍历与树上递归;会员题同 2261 题。
进阶
- 211. 添加与搜索单词 - 数据结构设计:练树遍历与树上递归。
- 676. 实现一个魔法字典:练树遍历与树上递归。
- 212. 单词搜索 II:练树遍历与树上递归。
- 3093. 最长公共后缀查询:练树遍历与树上递归。
- 745. 前缀和后缀搜索:练树遍历与树上递归。
- 3045. 统计前后缀下标对 II:练树遍历与树上递归。
- 336. 回文对:练树遍历与树上递归。
- 1948. 删除系统中的重复文件夹:练树遍历与树上递归。
- 425. 单词方块:练树遍历与树上递归,会员题。
- 527. 单词缩写:练树遍历与树上递归,会员题。
- 588. 设计内存文件系统:练树遍历与树上递归,会员题。
- 616. 给字符串添加加粗标签:练树遍历与树上递归,会员题。
- 758. 字符串中的加粗单词:练树遍历与树上递归,会员题。
- 642. 设计搜索自动补全系统:练树遍历与树上递归,会员题。
- 1065. 字符串的索引对:练树遍历与树上递归,会员题。
- 1166. 设计文件系统:练树遍历与树上递归,会员题。
- 1858. 包含所有前缀的最长单词:练树遍历与树上递归,会员题。
- 440. 字典序的第K小数字:练树遍历与树上递归。
字典树优化 DP
- 139. 单词拆分:练树遍历与树上递归。
- 140. 单词拆分 II:练树遍历与树上递归。
- 面试题 17.13. 恢复空格:练树遍历与树上递归。
- 472. 连接词:练树遍历与树上递归。
- 2977. 转换字符串的最小成本 II:练树遍历与树上递归。
0-1 字典树(异或字典树)
- 421. 数组中两个数的最大异或值:练树遍历与树上递归。
- 2935. 找出强数对的最大异或值 II:练树遍历与树上递归。
- 1707. 与数组中元素的最大异或值:练树遍历与树上递归。
- 1803. 统计异或值在范围内的数对有多少:练树遍历与树上递归。
- 1938. 查询最大基因差:练树遍历与树上递归。
- 3632. 异或至少为 K 的子数组数目:练树遍历与树上递归,会员题。
- 2479. 两个不重叠子树的最大异或值:练树遍历与树上递归,会员题。
并查集
基础
- 684. 冗余连接:练连通性合并;做法不止一种。
- 3493. 属性图:练连通性合并。
- 990. 等式方程的可满足性:练连通性合并。
- 721. 账户合并:练连通性合并。
- 3532. 针对图的路径存在性查询 I:练连通性合并。
- 737. 句子相似性 II:练连通性合并,会员题。
- 1101. 彼此熟识的最早时间:练连通性合并,会员题。
- 1258. 近义词句子:练连通性合并,会员题。
进阶
- 3551. 数位和排序需要的最小交换次数:练连通性合并;做法不止一种。
- 2471. 逐层排序二叉树所需的最少操作数目:练连通性合并;做法不止一种。
- 1202. 交换字符串中的元素:练连通性合并。
- 1061. 按字典序排列最小的等效字符串:练连通性合并。
- 1722. 执行交换操作后的最小汉明距离:练连通性合并。
- 3608. 包含 K 个连通分量需要的最小时间:练连通性合并。
- 3613. 最小化连通分量的最大成本:练连通性合并。
- 778. 水位上升的泳池中游泳:练连通性合并。
- 3695. 交换元素后的最大交替和:练连通性合并。
- 765. 情侣牵手:练连通性合并。
- 2092. 找出知晓秘密的所有专家:练连通性合并。
- 947. 移除最多的同行或同列石头:练连通性合并。
- 839. 相似字符串组:练连通性合并。
- 685. 冗余连接 II:练连通性合并;非暴力做法。
- 1970. 你能穿过矩阵的最后一天:练连通性合并。
- 2076. 处理含限制条件的好友请求:练连通性合并。
- 1579. 保证图可完全遍历:练连通性合并。
- 959. 由斜杠划分区域:练连通性合并。
- 2812. 找出最安全路径:练连通性合并。
- 2503. 矩阵查询可获得的最大分数:练连通性合并。
- 3600. 升级后最大生成树稳定性:练连通性合并;做法不止一种。
- 2867. 统计树中的合法路径数目:练连通性合并。
- 2421. 好路径的数目:练连通性合并。
- 2157. 字符串分组:练连通性合并。
- 1632. 矩阵转换后的排名:练连通性合并。
- 803. 打砖块:练连通性合并。
- 3235. 判断矩形的两个角落是否可达:练连通性合并。
- LCP 71. 集水器:练连通性合并。
- 2371. 最小化网格中的最大值:练连通性合并;会员题同 1632 题。
- 2459. 通过移动项目到空白区域来排序数组:练连通性合并;会员题置换。
GCD 并查集
- 2709. 最大公约数遍历:练连通性合并。
- 1627. 带阈值的图连通性:练连通性合并。
- 952. 按公因数计算最大组件大小:练连通性合并。
- 1998. 数组的最大公因数排序:练连通性合并。
- 3378. 统计最小公倍数图中的连通块数目:练连通性合并。
数组上的并查集
- 1562. 查找大小为 M 的最新分组:练连通性合并。
- 1488. 避免洪水泛滥:练连通性合并。
- 1353. 最多可以参加的会议数目:练连通性合并。
- 2382. 删除操作后的最大子段和:练连通性合并。
- 2334. 元素值大于变化阈值的子数组:练连通性合并。
- 3666. 使二进制字符串全为 1 的最少操作次数:练连通性合并。
- 2612. 最少翻转操作数:练连通性合并。
区间并查集
- 3244. 新增道路查询后的最短距离 II:练区间 DP 转移。
- 1851. 包含每个查询的最小区间:练区间 DP 转移。
- LCP 52. 二叉搜索树染色:练区间 DP 转移。
- 2158. 每天绘制新区域的数量:练区间 DP 转移,会员题。
带权并查集(边权并查集)
- 399. 除法求值:练连通性合并。
- 3710. 最大划分因子:练连通性合并。
- 2307. 检查方程中的矛盾之处:练连通性合并,会员题。
树状数组和线段树
树状数组
- 307. 区域和检索 - 数组可修改:练前缀修改与查询。
- 3072. 将元素分配到两个数组中 II:练前缀修改与查询。
- 3624. 位计数深度为 K 的整数数目 II:练前缀修改与查询。
- 3187. 数组中的峰值:练前缀修改与查询。
- 3777. 使子字符串变交替的最少删除次数:练前缀修改与查询;做法不止一种。
- 1649. 通过指令创建有序数组:练前缀修改与查询。
- 1626. 无矛盾的最佳球队:练前缀修改与查询。
- 1409. 查询带键的排列:练前缀修改与查询。
- 2250. 统计包含每个点的矩形数目:练前缀修改与查询。
- 2179. 统计数组中好三元组数目:练前缀修改与查询。
- 1395. 统计作战单位数:练前缀修改与查询。
- 2659. 将数组清空:练前缀修改与查询。
- 2653. 滑动子数组的美丽值:练前缀修改与查询。
- 3515. 带权树中的最短路径:练前缀修改与查询。
- LCP 05. 发 LeetCoin:练前缀修改与查询;同 3515 题。
- 1505. 最多 K 次交换相邻数位后得到的最小整数:练前缀修改与查询。
- 2926. 平衡子序列的最大和:练前缀修改与查询。
- 2736. 最大和查询:练前缀修改与查询。
- 3671. 子序列美丽值求和:练前缀修改与查询。
- 3382. 用点构造面积最大的矩形 II:练前缀修改与查询。
- 3590. 第 K 小的路径异或和:练前缀修改与查询。
- 3245. 交替组 III:练前缀修改与查询。
- 3027. 人员站位的方案数 II:练前缀修改与查询。
- 1756. 设计最近使用(MRU)队列:练前缀修改与查询,会员题。
- 60. 排列序列:练前缀修改与查询;康托展开,可以做到 O(nlogn)。
- 3109. 查找排列的下标:练前缀修改与查询;会员题60 题的数据加强版。
- 2519. 统计 K-Big 索引的数量:练前缀修改与查询,会员题。
- 2613. 美数对:练前缀修改与查询;会员题曼哈顿最近点对。
- 2921. 价格递增的最大利润三元组 II:练前缀修改与查询,会员题。
- 308. 二维区域和检索 - 可变:练前缀修改与查询,会员题。
逆序对
- LCR 170. 交易逆序对的总数:练前缀修改与查询。
- 315. 计算右侧小于当前元素的个数:练前缀修改与查询。
- 493. 翻转对:练前缀修改与查询。
- 327. 区间和的个数:练前缀修改与查询。
- 2426. 满足不等式的数对数目:练前缀修改与查询。
- 3768. 固定长度子数组中的最小逆序对数目:练前缀修改与查询。
- 1850. 邻位交换的最小次数:练前缀修改与查询;非暴力做法。
- 2193. 得到回文串的最少操作次数:练前缀修改与查询;非暴力做法。
- 1885. 统计数对:练前缀修改与查询,会员题。
线段树(无区间更新)
- 3479. 水果成篮 III:练区间 DP 转移。
- 2940. 找到 Alice 和 Bob 可以相遇的建筑:练区间 DP 转移。
- 2286. 以组为单位订音乐会的门票:练区间 DP 转移。
- 3161. 物块放置查询:练区间 DP 转移。
- 2213. 由单个字符重复的最长子字符串:练区间 DP 转移。
- 3777. 使子字符串变交替的最少删除次数:练区间 DP 转移。
- 3525. 求出数组的 X 值 II:练区间 DP 转移。
- 3165. 不包含相邻元素的子序列的最大和:练区间 DP 转移。
- 3410. 删除所有值为某个元素后的最大子数组和:练区间 DP 转移;做法不止一种。
- 3501. 操作后最大活跃区段数 II:练区间 DP 转移;也可以用 ST 表做。
- LCP 81. 与非的谜题:练区间 DP 转移。
- 1157. 子数组中占绝大多数的元素:练区间 DP 转移。
- 2407. 最长递增子序列 II:练区间 DP 转移。
Lazy 线段树(有区间更新)
- 2569. 更新数组后处理求和查询:练区间 DP 转移。
- 1622. 奇妙序列:练区间 DP 转移;做法不止一种。
- 2502. 设计内存分配器:练区间 DP 转移。
- 2589. 完成所有任务的最少时间:练区间 DP 转移;非暴力做法。
- 2547. 拆分数组的最小代价:练区间 DP 转移;非暴力做法。
- 850. 矩形面积 II:练区间 DP 转移。
- 3454. 分割正方形 II:练区间 DP 转移;同 850 题。
- 3569. 分割数组后不同质数的最大数目:练区间 DP 转移。
- 3721. 最长平衡子数组 II:练区间 DP 转移。
- 2916. 子数组不同元素数目的平方和 II:练区间 DP 转移。
- LCP 52. 二叉搜索树染色:练区间 DP 转移;也可以用珂朵莉树或者并查集。
动态开点线段树
- 699. 掉落的方块:练前缀修改与查询。
- 715. Range 模块:练前缀修改与查询。
- 729. 我的日程安排表 I:练前缀修改与查询。
- 731. 我的日程安排表 II:练前缀修改与查询。
- 732. 我的日程安排表 III:练前缀修改与查询。
- 2276. 统计区间中的整数数目:练前缀修改与查询。
- 2770. 达到末尾下标所需的最大跳跃次数:练前缀修改与查询。
- 3590. 第 K 小的路径异或和:练前缀修改与查询。
可持久化线段树
- 3762. 使数组元素相等的最小操作次数:练前缀修改与查询。
ST 表(Sparse Table)
- 3691. 最大子数组总值 II:练前缀修改与查询。
- 3501. 操作后最大活跃区段数 II:练前缀修改与查询。
伸展树(Splay 树)
- 2296. 设计一个文本编辑器:练树遍历与树上递归。
- 3526. 范围异或查询与子数组反转:练树遍历与树上递归,会员题。
根号算法
根号分解(Sqrt Decomposition)
- 3655. 区间乘法查询后的异或 II:练该小节核心套路。
- LCP 16. 游乐园的游览计划:练该小节核心套路。
- 1714. 数组中特殊等间距元素的和:练该小节核心套路,会员题。
- 3400. 右移后的最大匹配索引数:练该小节核心套路;会员题非暴力做法。
莫队算法
- 3636. 查询超过阈值频率最高元素:练该小节核心套路。
- 3590. 第 K 小的路径异或和:练该小节核心套路;做法不止一种 分块。
其他
- 3234. 统计 1 显著的字符串的数量:练补充套路与扩展变形。
专题:离线算法
- 2343. 裁剪数字后查询第 K 小的数字:练该小节核心套路。
- 3607. 电网维护:练该小节核心套路。
- 2070. 每一个查询的最大美丽值:练该小节核心套路。
- 1847. 最近的房间:练该小节核心套路。
- 2503. 矩阵查询可获得的最大分数:练该小节核心套路。
- 1851. 包含每个查询的最小区间:练该小节核心套路。
- 1697. 检查边长度限制的路径是否存在:练该小节核心套路。
- 2940. 找到 Alice 和 Bob 可以相遇的建筑:练该小节核心套路。
- 2747. 统计没有收到请求的服务器数目:练该小节核心套路。
- 1938. 查询最大基因差:练该小节核心套路。
- 2736. 最大和查询:练该小节核心套路。
- 3590. 第 K 小的路径异或和:练该小节核心套路。
- 3382. 用点构造面积最大的矩形 II:练该小节核心套路。
编程能力强化训练
Part A
- 12. 整数转罗马数字:练该小节核心套路。
- 13. 罗马数字转整数:练该小节核心套路。
- 273. 整数转换英文表示:练该小节核心套路。
- 68. 文本左右对齐:练该小节核心套路。
- 420. 强密码检验器:练该小节核心套路。
- 8. 字符串转换整数 (atoi):练该小节核心套路。
- 65. 有效数字:练该小节核心套路。
Part B
- 146. LRU 缓存:练该小节核心套路。
- 460. LFU 缓存:练该小节核心套路。
- 432. 全 O(1) 的数据结构:练该小节核心套路。
- 1206. 设计跳表:练该小节核心套路。
Part C
- 3197. 包含所有 1 的最小矩形面积 II:练该小节核心套路。
- 2532. 过桥的时间:练该小节核心套路。
- 2056. 棋盘上有效移动组合的数目:练该小节核心套路。
- LCP 48. 无限棋局:练该小节核心套路。
- LCP 21. 追逐游戏:练该小节核心套路。
- LCP 58. 积木拼接:练该小节核心套路。
- LCP 13. 寻宝:练该小节核心套路。
- LCP 69. Hello LeetCode!:练该小节核心套路。
- LCP 76. 魔法棋盘:练该小节核心套路。
- LCP 82. 万灵之树:练该小节核心套路。
数学算法
数论
判断质数
- 3115. 质数的最大距离:练整除与同余性质。
- 2614. 对角线上的质数:练整除与同余性质。
- 3765. 完全质数:练整除与同余性质。
- 3556. 最大质数子字符串之和:练整除与同余性质。
- 3044. 出现频率最高的质数:练整除与同余性质。
- 866. 回文质数:练整除与同余性质。
预处理质数(筛质数)
- 204. 计数质数:练整除与同余性质。
- 3618. 根据质数下标分割数组:练整除与同余性质。
- 3591. 检查元素频次是否为质数:练整除与同余性质。
- 762. 二进制表示中质数个计算置位:练整除与同余性质。
- 2761. 和等于目标值的质数对:练整除与同余性质。
- 3233. 统计不是特殊数字的数字数量:练整除与同余性质。
- 3770. 可表示为连续质数和的最大质数:练整除与同余性质。
- 2523. 范围内最接近的两个质数:练整除与同余性质。
- 2601. 质数减法运算:练整除与同余性质。
质因数分解
- 2521. 数组乘积中的不同质因数数目:练整除与同余性质。
- 2507. 使用质因数之和替换后可以取到的最小值:练整除与同余性质。
- 3326. 使数组非递减的最少除法操作次数:练整除与同余性质。
- 3629. 通过质数传送到达终点的最少跳跃次数:练整除与同余性质。
- 2584. 分割数组使乘积互质:练整除与同余性质。
- 2709. 最大公约数遍历:练整除与同余性质。
- 3715. 完全平方数的祖先个数总和:练整除与同余性质。
- 2862. 完全子集的最大元素和:练整除与同余性质。
- 2818. 操作使得分最大:练整除与同余性质。
- 1998. 数组的最大公因数排序:练整除与同余性质。
- 1735. 生成乘积数组的方案数:练整除与同余性质。
- 2338. 统计理想数组的数目:练整除与同余性质。
- LCP 14. 切分数组:练整除与同余性质。
阶乘分解
- 172. 阶乘后的零:练整除与同余性质。
- 793. 阶乘函数后 K 个零:练整除与同余性质。
因子
- 2427. 公因子的数目:练整除与同余性质。
- 1952. 三除数:练整除与同余性质。
- 1492. n 的第 k 个因子:练整除与同余性质。
- 507. 完美数:练整除与同余性质。
- 1390. 四因数:练整除与同余性质。
- 1362. 最接近的因数:练整除与同余性质。
- 829. 连续整数求和:练整除与同余性质。
- 3447. 将元素分配给有约束条件的组:练整除与同余性质。
- 3164. 优质数对的总数 II:练整除与同余性质。
- 2176. 统计数组中相等且可以被整除的数对:练整除与同余性质;非暴力做法约 2200。
- 2183. 统计可以被 K 整除的下标对数目:练整除与同余性质。
- 952. 按公因数计算最大组件大小:练整除与同余性质。
- 1627. 带阈值的图连通性:练整除与同余性质。
- 2198. 单因数三元组:练整除与同余性质,会员题。
- 625. 最小因式分解:练整除与同余性质,会员题。
- 2847. 给定数字乘积的最小数字:练整除与同余性质,会员题。
最大公约数(GCD)
- 1979. 找出数组的最大公约数:练整除与同余性质。
- 3658. 奇数和与偶数和的最大公约数:练整除与同余性质。
- 2169. 得到 0 的操作数:练整除与同余性质;非暴力做法。
- 914. 卡牌分组:练整除与同余性质。
- 1071. 字符串的最大公因子:练整除与同余性质。
- 2344. 使数组可以被整除的最少删除次数:练整除与同余性质。
- 365. 水壶问题:练整除与同余性质。
- 2654. 使数组所有元素变成 1 的最少操作次数:练整除与同余性质。
- 1250. 检查「好数组」:练整除与同余性质。
- 1625. 执行操作后字典序最小的字符串:练整除与同余性质。
- 2607. 使子数组元素和相等:练整除与同余性质。
- 2447. 最大公因数等于 K 的子数组数目:练整除与同余性质。
- 2543. 判断一个点是否可以到达:练整除与同余性质。
- 3574. 最大子数组 GCD 分数:练整除与同余性质。
- 3312. 查询排序后的最大公约数:练整除与同余性质。
- 3725. 统计每一行选择互质整数的方案数:练整除与同余性质。
- 1819. 序列中不同最大公约数的数目:练整除与同余性质。
- 3671. 子序列美丽值求和:练整除与同余性质。
- 2436. 使子数组最大公约数大于一的最小分割数:练整除与同余性质,会员题。
- 2464. 有效分割中的最少子数组数目:练整除与同余性质,会员题。
- 2941. 子数组的最大 GCD-Sum:练整除与同余性质;会员题可以用 logTrick。
- 2807. 在链表中插入最大公约数:练整除与同余性质。
最小公倍数(LCM)
- 2413. 最小偶倍数:练整除与同余性质。
- 3334. 数组的最大因子得分:练整除与同余性质。
- 858. 镜面反射:练整除与同余性质。
- 2197. 替换数组中的非互质数:练整除与同余性质。
- 2470. 最小公倍数为 K 的子数组数目:练整除与同余性质;logTrick 做到 O(nlogk)。
互质
- 2748. 美丽下标对的数目:练整除与同余性质。
- 1447. 最简分数:练整除与同余性质。
- 1766. 互质树:练整除与同余性质。
- 3411. 最长乘积等价子数组:练整除与同余性质;非暴力做法大约 2300。
同余
- 2453. 摧毁一系列目标:练整除与同余性质。
- 2598. 执行操作后的最大 MEX:练整除与同余性质。
- 1590. 使数组和能被 P 整除:练整除与同余性质。
数论分块
- 1925. 统计平方和三元组的数目:练整除与同余性质。
其他
- 1018. 可被 5 整除的二进制前缀:练整除与同余性质。
- 326. 3 的幂:练整除与同余性质;做到 O(1)。
- 1387. 将整数按权重排序:练整除与同余性质。
- 372. 超级次方:练整除与同余性质。
- 1015. 可被 K 整除的最小整数:练整除与同余性质。
- 3790. 最小全 1 倍数:练整除与同余性质;同 1015 题。
- 633. 平方数之和:练整除与同余性质。
- 279. 完全平方数:练整除与同余性质。
- 2240. 买钢笔和铅笔的方案数:练整除与同余性质。
组合数学
乘法原理
- 3128. 直角三角形:练组合计数与构造。
- 1573. 分割字符串的方案数:练组合计数与构造。
- 2750. 将数组划分成若干好子数组的方式:练组合计数与构造。
- 2316. 统计无向图中无法互相到达点对数:练组合计数与构造。
- 2550. 猴子碰撞的方法数:练组合计数与构造。
- 1922. 统计好数字的数目:练组合计数与构造。
- 3067. 在带权树网络中统计可连接服务器对数目:练组合计数与构造。
- 2147. 分隔长廊的方案数:练组合计数与构造。
- 2963. 统计好分割方案的数目:练组合计数与构造。
- 2306. 公司命名:练组合计数与构造。
- 2867. 统计树中的合法路径数目:练组合计数与构造。
- 1617. 统计子树中城市之间最大距离:练组合计数与构造;做到 O(n3)。
- 2450. 应用操作后不同二进制字符串的数量:练组合计数与构造,会员题。
组合计数
- 62. 不同路径:练组合计数与构造。
- 357. 统计各位数字都不同的数字个数:练组合计数与构造。
- 1175. 质数排列:练组合计数与构造。
- 3179. K 秒后第 N 个元素的值:练组合计数与构造。
- 1359. 有效的快递序列数目:练组合计数与构造。
- 2400. 恰好移动 k 步到达某一位置的方法数目:练组合计数与构造。
- 3558. 给边赋权值的方案数 I:练组合计数与构造。
- 3821. 二进制中恰好K个1的第N小整数:练组合计数与构造。
- 762. 二进制表示中质数个计算置位:练组合计数与构造;非暴力做法。
- 2514. 统计同位异构字符串数目:练组合计数与构造。
- 3154. 到达第 K 级台阶的方案数:练组合计数与构造。
- 1643. 第 K 条最小指令:练组合计数与构造。
- 2842. 统计一个字符串的 k 子序列美丽值最大的数目:练组合计数与构造。
- 2221. 数组的三角和:练组合计数与构造。
- 3463. 判断操作后字符串中的数字是否相等 II:练组合计数与构造。
- 3519. 统计逐位非递减的整数:练组合计数与构造。
- 1569. 将子数组重新排序得到同一个二叉搜索树的方案数:练组合计数与构造。
- 3405. 统计恰好有 K 个相等相邻元素的数组数目:练组合计数与构造。
- 1866. 恰有 K 根木棍可以看到的排列数目:练组合计数与构造。
- 1467. 两个盒子中球的颜色数相同的概率:练组合计数与构造。
- 3518. 最小回文排列 II:练组合计数与构造。
- 3272. 统计好整数的数目:练组合计数与构造。
- 3317. 安排活动的方案数:练组合计数与构造。
- 3470. 全排列 IV:练组合计数与构造。
- 1916. 统计为蚁群构筑房间的不同顺序:练组合计数与构造。
- 3343. 统计平衡排列的数目:练组合计数与构造。
- 1830. 使字符串有序的最少操作次数:练组合计数与构造。
- 2954. 统计感冒序列的数目:练组合计数与构造。
- 3539. 魔法序列的数组乘积之和:练组合计数与构造。
- 3395. 唯一中间众数子序列 I:练组合计数与构造;做到 O(n) 时间。
- 1575. 统计所有可行路径:练组合计数与构造。
- 3251. 单调数组对的数目 II:练组合计数与构造;做到 O(n) 时间。
- LCP 25. 古董键盘:练组合计数与构造。
- 2539. 好子序列的个数:练组合计数与构造,会员题。
- 634. 寻找数组的错位排列:练组合计数与构造,会员题。
- 1692. 计算分配糖果的不同方式:练组合计数与构造;会员题第二类斯特林数。
放球问题
- 1641. 统计字典序元音字符串的数目:练组合计数与构造。
- 1621. 大小为 K 的不重叠线段的数目:练组合计数与构造。
- 1735. 生成乘积数组的方案数:练组合计数与构造。
- 2338. 统计理想数组的数目:练组合计数与构造。
- 3669. K 因数分解:练组合计数与构造。
容斥原理
- 2652. 倍数求和:练组合计数与构造。
- 878. 第 N 个神奇数字:练组合计数与构造。
- 1201. 丑数 III:练组合计数与构造。
- 2929. 给小朋友们分糖果 II:练组合计数与构造。
- 2930. 重新排列后包含指定子字符串的字符串数目:练组合计数与构造。
- 2513. 最小化两个数组中的最大值:练组合计数与构造。
- 3733. 完成所有送货任务的最少时间:练组合计数与构造;同 2513 题。
- 3116. 单面值组合的第 K 小金额:练组合计数与构造。
- 3757. 有效子序列的数量:练组合计数与构造。
- 3130. 找出所有稳定的二进制数组 II:练组合计数与构造。
- 920. 播放列表的数量:练组合计数与构造。
- 3336. 最大公约数相等的子序列数量:练组合计数与构造。
- 2927. 给小朋友们分糖果 III:练组合计数与构造,会员题。
生成函数(母函数)
- 1155. 掷骰子等于目标和的方法数:练组合计数与构造。
- 629. K 个逆序对数组:练组合计数与构造。
- 3193. 统计逆序对的数目:练组合计数与构造。
- 3082. 求出所有子序列的能量和:练组合计数与构造。
- 2518. 好分区的数目:练组合计数与构造。
- 3333. 找到初始输入字符串 II:练组合计数与构造。
概率期望
- 1227. 飞机座位分配概率:练期望递推与概率建模。
- 688. 骑士在棋盘上的概率:练期望递推与概率建模。
- 837. 新 21 点:练期望递推与概率建模。
- 1467. 两个盒子中球的颜色数相同的概率:练期望递推与概率建模。
- 808. 分汤:练期望递推与概率建模。
- LCR 185. 统计结果概率:练期望递推与概率建模。
- LCP 11. 期望个数统计:练期望递推与概率建模。
- 九坤-04. 筹码游戏:练期望递推与概率建模。
- 1230. 抛掷硬币:练期望递推与概率建模,会员题。
- 3494. 酿造药水需要的最少总时间:练期望递推与概率建模。
博弈论
- 292. Nim 游戏:练胜负状态分析。
- 1025. 除数博弈:练胜负状态分析。
- 3227. 字符串元音游戏:练胜负状态分析。
- 2038. 如果相邻两个颜色均相同则删除当前颜色:练胜负状态分析。
- 877. 石子游戏:练胜负状态分析。
- 3828. 删除子数组后的最终元素:练胜负状态分析。
- 1510. 石子游戏 IV:练胜负状态分析。
- 486. 预测赢家:练胜负状态分析。
- 1690. 石子游戏 VII:练胜负状态分析。
- 1686. 石子游戏 VI:练胜负状态分析。
- 1927. 求和游戏:练胜负状态分析。
- 1406. 石子游戏 III:练胜负状态分析。
- 1140. 石子游戏 II:练胜负状态分析。
- 1563. 石子游戏 V:练胜负状态分析。
- 464. 我能赢吗:练胜负状态分析。
- 2029. 石子游戏 IX:练胜负状态分析。
- 810. 黑板异或游戏:练胜负状态分析。
- 1872. 石子游戏 VIII:练胜负状态分析。
- 913. 猫和老鼠:练胜负状态分析。
- 1728. 猫和老鼠 II:练胜负状态分析。
- LCP 48. 无限棋局:练胜负状态分析。
- 294. 翻转游戏 II:练胜负状态分析,会员题。
- 1908. Nim 游戏 II:练胜负状态分析,会员题。
- 2005. 斐波那契树的移除子树游戏:练胜负状态分析,会员题。
- 2868. 单词游戏:练胜负状态分析,会员题。
计算几何
点、线
- 1232. 缀点成线:练几何关系与判定。
- 2280. 表示一个折线图的最少线段数:练几何关系与判定。
- 1610. 可见点的最大数目:练几何关系与判定。
- 面试题 16.03. 交点:练几何关系与判定。
- 面试题 16.13. 平分正方形:练几何关系与判定。
- 面试题 16.14. 最佳直线:练几何关系与判定。
- LCP 37. 最小矩形面积:练几何关系与判定。
- 2152. 穿过所有点的所需最少直线数量:练几何关系与判定,会员题。
圆
- 1401. 圆和矩形是否有重叠:练几何关系与判定。
- 1453. 圆形靶内的最大飞镖数量:练几何关系与判定。
- LCP 42. 玩具套圈:练几何关系与判定。
- 3235. 判断矩形的两个角落是否可达:练几何关系与判定。
- 1924. 安装栅栏 II:练几何关系与判定;会员题最小圆覆盖 Welzl 算法。
矩形、多边形
- 836. 矩形重叠:练几何关系与判定。
- 223. 矩形面积:练几何关系与判定。
- 593. 有效的正方形:练几何关系与判定。
- 939. 最小面积矩形:练几何关系与判定。
- 963. 最小面积矩形 II:练几何关系与判定。
- 3625. 统计梯形的数目 II:练几何关系与判定。
- 469. 凸多边形:练几何关系与判定,会员题。
凸包
- 587. 安装栅栏:练几何关系与判定。
- 812. 最大三角形面积:练几何关系与判定。
- LCP 15. 游乐园的迷宫:练几何关系与判定。
随机算法
随机数
- 398. 随机数索引:练概率化思路。
- 382. 链表随机节点:练概率化思路。
- 384. 打乱数组:练概率化思路。
- 380. O(1) 时间插入、删除和获取随机元素:练概率化思路。
- 381. O(1) 时间插入、删除和获取随机元素 - 允许重复:练概率化思路。
- 528. 按权重随机选择:练概率化思路。
- 470. 用 Rand7() 实现 Rand10():练概率化思路。
- 710. 黑名单中的随机数:练概率化思路。
- 478. 在圆内随机生成点:练概率化思路。
- 497. 非重叠矩形中的随机点:练概率化思路。
- 519. 随机翻转矩阵:练概率化思路。
随机化技巧
- 961. 在长度 2N 的数组中找出重复 N 次的元素:练概率化思路。
- 1317. 将整数转换为两个无零整数的和:练概率化思路。
- 1968. 构造元素不等于两相邻元素平均值的数组:练概率化思路。
- 1157. 子数组中占绝大多数的元素:练概率化思路。
- 3680. 生成赛程:练概率化思路。
杂项
回文数
- 9. 回文数:练该小节核心套路。
- 2396. 严格回文的数字:练该小节核心套路。
- 2217. 找到指定长度的回文数:练该小节核心套路。
- 866. 回文质数:练该小节核心套路。
- 3766. 将数字变成二进制回文数的最少操作:练该小节核心套路;非暴力做法。
- 564. 寻找最近的回文数:练该小节核心套路。
- 2967. 使数组成为等数数组的最小代价:练该小节核心套路。
- 906. 超级回文数:练该小节核心套路。
- 2081. k 镜像数字的和:练该小节核心套路。
- 3677. 统计二进制回文数字的数目:练该小节核心套路。
- 3260. 找出最大的 N 位 K 回文数:练该小节核心套路。
- 3272. 统计好整数的数目:练该小节核心套路。
- 3646. 下一个特殊回文数:练该小节核心套路。
- 479. 最大回文数乘积:练该小节核心套路。
整数拆分
- 343. 整数拆分:练该小节核心套路。
- 1808. 好因子的最大数目:练该小节核心套路。
曼哈顿距离与切比雪夫距离
- 1266. 访问所有点的最小时间:练该小节核心套路。
- 3443. K 次修改后的最大曼哈顿距离:练该小节核心套路。
- 1131. 绝对值表达式的最大值:练该小节核心套路。
- 3102. 最小化曼哈顿距离:练该小节核心套路。
- 1330. 翻转子数组得到最大的数组值:练该小节核心套路。
- 3464. 正方形上的点之间的最大距离:练该小节核心套路。
- 1956. 感染 K 种病毒所需的最短时间:练该小节核心套路,会员题。
- 2613. 美数对:练该小节核心套路,会员题。
多项式
- 611. 有效三角形的个数:练该小节核心套路;做到 O(n+UlogU)。
- 923. 三数之和的多种可能:练该小节核心套路;做到 O(n+UlogU)。
- 835. 图像重叠:练该小节核心套路。
- 3549. 两个多项式相乘:练该小节核心套路;会员题FFT 模板。
- 259. 较小的三数之和:练该小节核心套路;会员题做到 O(n+UlogU)。
- 3078. 矩阵中的字母数字模式匹配 I:练该小节核心套路,会员题。
- 3400. 右移后的最大匹配索引数:练该小节核心套路;会员题根号分解。
快速沃尔什变换(FWT)
- 3514. 不同 XOR 三元组的数目 II:练该小节核心套路。
- 1723. 完成所有工作的最短时间:练该小节核心套路。
摩尔投票法
- 169. 多数元素:练该小节核心套路。
- 961. 在长度 2N 的数组中找出重复 N 次的元素:练该小节核心套路。
- 2780. 合法分割的最小下标:练该小节核心套路。
- 229. 多数元素 II:练该小节核心套路。
- 1157. 子数组中占绝大多数的元素:练该小节核心套路。
其他
- 1523. 在区间范围内统计奇数数目:练补充套路与扩展变形。
- 1716. 计算力扣银行的钱:练补充套路与扩展变形。
- 2829. k-avoiding 数组的最小总和:练补充套路与扩展变形。
- 2579. 统计染色格子数:练补充套路与扩展变形。
- 3648. 覆盖网格的最少传感器数目:练补充套路与扩展变形。
- 2834. 找出美丽数组的最小和:练补充套路与扩展变形。
- 1414. 和为 K 的最少斐波那契数字数目:练补充套路与扩展变形。
- 319. 灯泡开关:练补充套路与扩展变形。
- 1780. 判断一个数字是否可以表示成三的幂的和:练补充套路与扩展变形。
- 3091. 执行操作使数据元素之和大于等于 K:练补充套路与扩展变形。
- 3468. 可行数组的数目:练补充套路与扩展变形。
- 2310. 个位数字为 K 的整数之和:练补充套路与扩展变形。
- 2145. 统计隐藏数组数目:练补充套路与扩展变形。
- 2541. 使数组中所有元素相等的最小操作数 II:练补充套路与扩展变形。
- 1502. 判断能否形成等差数列:练补充套路与扩展变形;做到 O(n)。
- 2195. 向数组中追加 K 个整数:练补充套路与扩展变形。
- 2457. 美丽整数的最小增量:练补充套路与扩展变形。
- 1017. 负二进制转换:练补充套路与扩展变形。
- 3649. 完美对的数目:练补充套路与扩展变形。
- 1954. 收集足够苹果的最小花园周长:练补充套路与扩展变形。
- 1073. 负二进制数相加:练补充套路与扩展变形。
- 1823. 找出游戏的获胜者:练补充套路与扩展变形。
- 166. 分数到小数:练补充套路与扩展变形。
- 3012. 通过操作使数组长度最小:练补充套路与扩展变形。
- 483. 最小好进制:练补充套路与扩展变形。
- 3782. 交替删除操作后最后剩下的整数:练补充套路与扩展变形。
- 390. 消除游戏:练补充套路与扩展变形。
- 972. 相等的有理数:练补充套路与扩展变形。
- 1515. 服务中心的最佳位置:练补充套路与扩展变形。
- 1862. 向下取整数对和:练补充套路与扩展变形。
- 1739. 放置盒子:练补充套路与扩展变形。
- 2443. 反转之后的数字和:练补充套路与扩展变形;非暴力做法。
- 1806. 还原排列的最少操作步数:练补充套路与扩展变形;非暴力做法。
- 458. 可怜的小猪:练补充套路与扩展变形。
- 60. 排列序列:练补充套路与扩展变形。
- 2117. 一个区间内所有数乘积的缩写:练补充套路与扩展变形。
- 3666. 使二进制字符串全为 1 的最少操作次数:练补充套路与扩展变形。
- LCP 02. 分式化简:练补充套路与扩展变形。
- LCP 29. 乐团站位:练补充套路与扩展变形。
- LCP 46. 志愿者调配:练补充套路与扩展变形。
- 800. 相似 RGB 颜色:练补充套路与扩展变形,会员题。
- 660. 移除 9:练补充套路与扩展变形,会员题。
- 2979. 最贵的无法购买的商品:练补充套路与扩展变形,会员题。
- 2647. 把三角形染成红色:练补充套路与扩展变形,会员题。
贪心与思维
贪心策略
从最小/最大开始贪心
- 3074. 重新分装苹果:练局部最优策略选择。
- 3545. 不同字符数量最多为 K 时的最少删除数:练局部最优策略选择。
- 3745. 三元素表达式的最大值:练局部最优策略选择。
- 2279. 装满石头的背包的最大数量:练局部最优策略选择。
- 1833. 雪糕的最大数量:练局部最优策略选择。
- 1005. K 次取反后最大化的数组和:练局部最优策略选择。
- 1481. 不同整数的最少数目:练局部最优策略选择。
- 1403. 非递增顺序的最小子序列:练局部最优策略选择。
- 3010. 将数组分成最小总代价的子数组 I:练局部最优策略选择。
- 1338. 数组大小减半:练局部最优策略选择。
- 1710. 卡车上的最大单元数:练局部最优策略选择。
- 3075. 幸福值最大化的选择方案:练局部最优策略选择。
- 2554. 从一个范围内选择最多整数 I:练局部最优策略选择。
- 2126. 摧毁小行星:练局部最优策略选择。
- 2587. 重排数组以得到最大前缀分数:练局部最优策略选择。
- 976. 三角形的最大周长:练局部最优策略选择。
- 1561. 你可以获得的最大硬币数目:练局部最优策略选择。
- 3627. 中位数之和的最大值:练局部最优策略选择;同 1561 题。
- 3462. 提取至多 K 个元素的最大总和:练局部最优策略选择。
- 2099. 找到和最大的长度为 K 的子序列:练局部最优策略选择。
- 3301. 高度互不相同的最大塔高和:练局部最优策略选择。
- 945. 使数组唯一的最小增量:练局部最优策略选择。
- 1846. 减小和重新排列数组后的最大元素:练局部最优策略选择。
- 3727. 最大交替平方和:练局部最优策略选择。
- 1647. 字符频次唯一的最小删除次数:练局部最优策略选择。
- 2971. 找到最大周长的多边形:练局部最优策略选择。
- 2178. 拆分成最多数目的正偶数之和:练局部最优策略选择。
- 1578. 使绳子变成彩色的最短时间:练局部最优策略选择。
- 2567. 修改两个元素的最小分数:练局部最优策略选择。
- 1509. 三次操作后最大值与最小值的最小差:练局部最优策略选择。
- 2611. 老鼠和奶酪:练局部最优策略选择。
- 3397. 执行操作后不同元素的最大数量:练局部最优策略选择。
- 3457. 吃披萨:练局部最优策略选择。
- 3767. 选择 K 个任务的最大总分数:练局部最优策略选择。
- LCP 40. 心算挑战:练局部最优策略选择。
- 1262. 可被三整除的最大和:练局部最优策略选择。
- 948. 令牌放置:练局部最优策略选择。
- 1775. 通过最少操作次数使数组的和相等:练局部最优策略选择。
- 2333. 最小差值平方和:练局部最优策略选择。
- 3645. 最优激活顺序得到的最大总和:练局部最优策略选择。
- 2141. 同时运行 N 台电脑的最长时间:练局部最优策略选择。
- 1196. 最多可以买到的苹果数量:练局部最优策略选择,会员题。
- 2214. 通关游戏所需的最低生命值:练局部最优策略选择,会员题。
- 3763. 带阈值约束的最大总和:练局部最优策略选择,会员题。
- 3730. 跳跃燃烧的最大卡路里:练局部最优策略选择,会员题。
- 3476. 最大化任务分配的利润:练局部最优策略选择,会员题。
- 2098. 长度为 K 的最大偶数和子序列:练局部最优策略选择;会员题同 LCP 40。
- 2548. 填满背包的最大价格:练局部最优策略选择,会员题。
- 3119. 最大数量的可修复坑洼:练局部最优策略选择,会员题。
- 2557. 从一个范围内选择最多整数 II:练局部最优策略选择,会员题。
- LCS 02. 完成一半题目:练局部最优策略选择。
- 1984. 学生分数的最小差值:练局部最优策略选择。
- 624. 数组列表中的最大距离:练局部最优策略选择。
- 910. 最小差值 II:练局部最优策略选择。
- 2835. 使子序列的和等于目标的最少操作次数:练局部最优策略选择。
- 3366. 最小数组和:练局部最优策略选择。
单序列配对
- 2144. 打折购买糖果的最小开销:练局部最优策略选择。
- 561. 数组拆分:练局部最优策略选择。
- 1877. 数组中最大数对和的最小值:练局部最优策略选择。
- 881. 救生艇:练局部最优策略选择。
- 2592. 最大化数组的伟大值:练局部最优策略选择。
- 2576. 求出最多标记下标:练局部最优策略选择。
双序列配对
- 2037. 使每位学生都有座位的最少移动次数:练局部最优策略选择。
- 455. 分发饼干:练局部最优策略选择。
- 2410. 运动员和训练师的最大匹配数:练局部最优策略选择;同 455 题。
- 1433. 检查一个字符串是否可以打破另一个字符串:练局部最优策略选择。
- 870. 优势洗牌:练局部最优策略选择。
- 826. 安排工作以达到最大收益:练局部最优策略选择。
- 2449. 使数组相似的最少操作次数:练局部最优策略选择。
- 1889. 装包裹的最小浪费空间:练局部最优策略选择。
- 2561. 重排水果:练局部最优策略选择。
- 2071. 你可以安排的最多任务数目:练局部最优策略选择。
- 2323. 完成所有工作的最短时间 II:练局部最优策略选择,会员题。
从最左/最右开始贪心
- 3402. 使每一列严格递增的最少操作次数:练局部最优策略选择。
- 3191. 使二进制数组全部等于 1 的最少操作次数 I:练局部最优策略选择。
- 1827. 最少操作使数组递增:练局部最优策略选择。
- 2027. 转换字符串的最少操作次数:练局部最优策略选择。
- 605. 种花问题:练局部最优策略选择。
- 3111. 覆盖所有点的最少矩形数目:练局部最优策略选择。
- 2957. 消除相邻近似相等字符:练局部最优策略选择。
- 3192. 使二进制数组全部等于 1 的最少操作次数 II:练局部最优策略选择。
- 1529. 最少的后缀翻转次数:练局部最优策略选择;同 3192 题。
- 2789. 合并后数组中的最大元素:练局部最优策略选择。
- 3576. 数组元素相等转换:练局部最优策略选择。
- 1144. 递减元素使数组呈锯齿状:练局部最优策略选择。
- 3228. 将 1 移动到末尾的最大操作次数:练局部最优策略选择。
- 2086. 喂食仓鼠的最小食物桶数:练局部最优策略选择。
- 2571. 将整数减少到零需要的最少操作数:练局部最优策略选择。
- 3776. 使循环数组余额非负的最少移动次数:练局部最优策略选择。
- 861. 翻转矩阵后的得分:练局部最优策略选择。
- 3326. 使数组非递减的最少除法操作次数:练局部最优策略选择。
- 955. 删列造序 II:练局部最优策略选择。
- 1536. 排布二进制网格的最少交换次数:练局部最优策略选择。
- 2673. 使二叉树所有路径值相等的最小代价:练局部最优策略选择。
- 1488. 避免洪水泛滥:练局部最优策略选择。
- 2366. 将数组排序的最少替换次数:练局部最优策略选择。
- 2528. 最大化城市的最小电量:练局部最优策略选择。
- 3449. 最大化游戏分数的最小值:练局部最优策略选择。
- 2422. 使用合并操作将数组转换为回文序列:练局部最优策略选择,会员题。
划分型贪心
- 1221. 分割平衡字符串:练区间划分与状态设计。
- 2405. 子字符串的最优划分:练区间划分与状态设计。
- 2294. 划分数组使最大差为 K:练区间划分与状态设计。
- 2358. 分组的最大数量:练区间划分与状态设计。
- 2522. 将字符串分割成值不超过 K 的子字符串:练区间划分与状态设计。
- 3557. 不相交子字符串的最大数量:练区间划分与状态设计。
- 1546. 和为目标值且不重叠的非空子数组的最大数目:练区间划分与状态设计。
- 2436. 使子数组最大公约数大于一的最小分割数:练区间划分与状态设计,会员题。
- 2892. 将相邻元素相乘后得到最小化数组:练区间划分与状态设计,会员题。
先枚举,再贪心
- 2171. 拿出最少数目的魔法豆:练局部最优策略选择。
- 3085. 成为 K 特殊字符串需要删除的最少字符数:练局部最优策略选择。
- 1727. 重新排列后的最大子矩阵:练局部最优策略选择。
- 2749. 得到整数零需要执行的最少操作数:练局部最优策略选择。
- 2910. 合法分组的最少组数:练局部最优策略选择。
- 2234. 花园的最大总美丽值:练局部最优策略选择。
交换论证法
- 1877. 数组中最大数对和的最小值:练局部最优策略选择。
- 2895. 最小处理时间:练局部最优策略选择。
- 3457. 吃披萨:练局部最优策略选择。
- 1665. 完成所有任务的最少初始能量:练局部最优策略选择。
- 3273. 对 Bob 造成的最少伤害:练局部最优策略选择。
- 2136. 全部开花的最早一天:练局部最优策略选择。
- 2561. 重排水果:练局部最优策略选择。
- 179. 最大数:练局部最优策略选择。
- 3309. 连接二进制表示可形成的最大数值:练局部最优策略选择;非暴力做法。
- 2412. 完成所有交易的初始最少钱数:练局部最优策略选择。
相邻不同
- 2335. 装满杯子需要的最短总时长:练局部最优策略选择。
- 3659. 数组元素分组:练局部最优策略选择。
- 1753. 移除石子的最大得分:练局部最优策略选择;同 2335 题,但数据范围更大。
- 767. 重构字符串:练局部最优策略选择。
- 1054. 距离相等的条形码:练局部最优策略选择;同 767 题。
- 2856. 删除数对后的最小数组长度:练局部最优策略选择。
- 1953. 你可以工作的最大周数:练局部最优策略选择。
- 3785. 避免禁用值的最小交换次数:练局部最优策略选择。
- 3664. 两个字母卡牌游戏:练局部最优策略选择。
- 3495. 使数组元素都变为零的最少操作次数:练局部最优策略选择。
- 3139. 使数组中所有元素相等的最小开销:练局部最优策略选择。
- 621. 任务调度器:练局部最优策略选择;相同元素至少间隔 n。
- 358. K 距离间隔重排字符串:练局部最优策略选择,会员题。
- 984. 不含 AAA 或 BBB 的字符串:练局部最优策略选择。
- 1405. 最长快乐字符串:练局部最优策略选择。
反悔贪心
- LCP 30. 魔塔游戏:练局部最优策略选择。
- 1642. 可以到达的最远建筑:练局部最优策略选择。
- 630. 课程表 III:练局部最优策略选择。
- 871. 最低加油次数:练局部最优策略选择。
- 3362. 零数组变换 III:练局部最优策略选择。
- 2813. 子序列最大优雅度:练局部最优策略选择;也可以不用堆。
- 3049. 标记所有下标的最早秒数 II:练局部最优策略选择。
- 3711. 不出现负余额的最大交易额:练局部最优策略选择,会员题。
- 2599. 使前缀和数组非负:练局部最优策略选择,会员题。
区间贪心
不相交区间
- 435. 无重叠区间:练区间 DP 转移。
- 646. 最长数对链:练区间 DP 转移;同 435 题。
- 1520. 最多的不重叠子字符串:练区间 DP 转移。
- 3458. 选择 K 个互不重叠的特殊子字符串:练区间 DP 转移;同 1520 题。
区间分组
- 2406. 将区间分为最少组数:练区间 DP 转移。
- 253. 会议室 II:练区间 DP 转移,会员题。
区间选点
- 452. 用最少数量的箭引爆气球:练区间 DP 转移。
- 757. 设置交集大小至少为2:练区间 DP 转移。
- 2589. 完成所有任务的最少时间:练区间 DP 转移。
- LCP 32. 批量处理任务:练区间 DP 转移。
区间覆盖
- 45. 跳跃游戏 II:练区间 DP 转移。
- 1024. 视频拼接:练区间 DP 转移。
- 1326. 灌溉花园的最少水龙头数目:练区间 DP 转移。
合并区间
- 56. 合并区间:练区间 DP 转移。
- 57. 插入区间:练区间 DP 转移。
- 2848. 与车相交的点:练区间 DP 转移;非暴力做法。
- 55. 跳跃游戏:练区间 DP 转移。
- 763. 划分字母区间:练区间 DP 转移。
- 3169. 无需开会的工作日:练区间 DP 转移。
- 2580. 统计将重叠区间合并成组的方案数:练区间 DP 转移。
- 3394. 判断网格图能否被切割成块:练区间 DP 转移。
- 2963. 统计好分割方案的数目:练区间 DP 转移。
- 2584. 分割数组使乘积互质:练区间 DP 转移。
- 616. 给字符串添加加粗标签:练区间 DP 转移,会员题。
- 758. 字符串中的加粗单词:练区间 DP 转移,会员题。
- 3323. 通过插入区间最小化连通组:练区间 DP 转移,会员题。
- 759. 员工空闲时间:练区间 DP 转移,会员题。
- 2655. 寻找最大长度的未覆盖区间:练区间 DP 转移,会员题。
其他区间贪心
- 1288. 删除被覆盖区间:练区间 DP 转移;非暴力做法。
- 2054. 两个最好的不重叠活动:练区间 DP 转移。
- 1705. 吃苹果的最大数目:练区间 DP 转移。
- 1353. 最多可以参加的会议数目:练区间 DP 转移。
字符串贪心
字典序最小/最大
- 1323. 6 和 9 组成的最大数字:练局部最优策略选择。
- 3216. 交换后字典序最小的字符串:练局部最优策略选择。
- 2697. 字典序最小回文串:练局部最优策略选择。
- 3517. 最小回文排列 I:练局部最优策略选择。
- 1881. 插入后的最大值:练局部最优策略选择。
- 2734. 执行子串操作后的字典序最小字符串:练局部最优策略选择。
- 1432. 改变一个整数能得到的最大差值:练局部最优策略选择。
- 1946. 子字符串突变后可能得到的最大整数:练局部最优策略选择。
- 1663. 具有给定数值的最小字符串:练局部最优策略选择。
- 1328. 破坏回文串:练局部最优策略选择。
- 2259. 移除指定数字得到的最大结果:练局部最优策略选择;非暴力做法。
- 2566. 替换一个数字后的最大差值:练局部最优策略选择;非暴力做法。
- 670. 最大交换:练局部最优策略选择;非暴力做法。
- 3106. 满足距离约束且字典序最小的字符串:练局部最优策略选择。
- 3723. 数位平方和的最大值:练局部最优策略选择。
- 1053. 交换一次的先前排列:练局部最优策略选择。
- 2375. 根据模式串构造最小数字:练局部最优策略选择。
- 2182. 构造限制重复的字符串:练局部最优策略选择。
- 738. 单调递增的数字:练局部最优策略选择。
- 3403. 从盒子中找出字典序最大的字符串 I:练局部最优策略选择。
- 3170. 删除星号以后字典序最小的字符串:练局部最优策略选择。
- 1363. 形成三的最大倍数:练局部最优策略选择。
- 3752. 字典序最小和为目标值且绝对值是排列的数组:练局部最优策略选择。
- 1754. 构造字典序最大的合并字符串:练局部最优策略选择。
- 1202. 交换字符串中的元素:练局部最优策略选择。
- 2434. 使用机器人打印字典序最小的字符串:练局部最优策略选择。
- 2948. 交换得到字典序最小的数组:练局部最优策略选择。
- 1505. 最多 K 次交换相邻数位后得到的最小整数:练局部最优策略选择。
- 3474. 字典序最小的生成字符串:练局部最优策略选择。
- 555. 分割连接字符串:练局部最优策略选择,会员题。
- 3088. 使字符串反回文:练局部最优策略选择,会员题。
- 3720. 大于目标字符串的最小字典序排列:练局部最优策略选择。
- 3734. 大于目标字符串的最小字典序回文排列:练局部最优策略选择。
- 2663. 字典序最小的美丽字符串:练局部最优策略选择。
- 2048. 下一个更大的数值平衡数:练局部最优策略选择;非暴力做法。
- 3646. 下一个特殊回文数:练局部最优策略选择;非暴力做法。
- 3348. 最小可整除数位乘积 II:练局部最优策略选择。
回文串贪心
- 409. 最长回文串:练局部最优策略选择。
- 2697. 字典序最小回文串:练局部最优策略选择。
- 3517. 最小回文排列 I:练局部最优策略选择。
- 680. 验证回文串 II:练局部最优策略选择。
- 1328. 破坏回文串:练局部最优策略选择。
- 1400. 构造 K 个回文字符串:练局部最优策略选择。
- 2131. 连接两字母单词得到的最长回文串:练局部最优策略选择。
- 2384. 最大回文数字:练局部最优策略选择。
- 3035. 回文字符串的最大数量:练局部最优策略选择。
- 1616. 分割两个字符串得到回文串:练局部最优策略选择。
- 1147. 段式回文:练局部最优策略选择。
- 2193. 得到回文串的最少操作次数:练局部最优策略选择。
- 3734. 大于目标字符串的最小字典序回文排列:练局部最优策略选择。
- 3646. 下一个特殊回文数:练局部最优策略选择;非暴力做法。
- 266. 回文排列:练局部最优策略选择,会员题。
- 2422. 使用合并操作将数组转换为回文序列:练局部最优策略选择,会员题。
- 1842. 下个由相同数字构成的回文串:练局部最优策略选择,会员题。
- 3088. 使字符串反回文:练局部最优策略选择,会员题。
数学贪心
基础
- 2160. 拆分数位后四位数字的最小和:练局部最优策略选择。
- 2578. 最小和分割:练局部最优策略选择。
- 2244. 完成所有任务需要的最少轮数:练局部最优策略选择。
- 2870. 使数组为空的最少操作次数:练局部最优策略选择。
- 1217. 玩筹码:练局部最优策略选择。
- 3091. 执行操作使数据元素之和大于等于 K:练局部最优策略选择。
- LCS 01. 下载插件:练局部最优策略选择。
- 397. 整数替换:练局部最优策略选择。
乘积贪心
- 628. 三个数的最大乘积:练局部最优策略选择。
- 3732. 一次替换后的三元素最大乘积:练局部最优策略选择。
- 1567. 乘积为正数的最长子数组长度:练局部最优策略选择。
排序不等式
- 2285. 道路的最大总重要性:练局部最优策略选择。
- 3016. 输入单词需要的最少按键次数 II:练局部最优策略选择。
- 1402. 做菜顺序:练局部最优策略选择。
- 2931. 购买物品的最大开销:练局部最优策略选择。
- 1589. 所有排列中的最大和:练局部最优策略选择。
- 1874. 两个数组的最小乘积和:练局部最优策略选择,会员题。
- 2268. 最少按键次数:练局部最优策略选择;会员题同 3016 题。
- 2561. 重排水果:练局部最优策略选择。
- 3547. 图中边值的最大和:练局部最优策略选择。
均值不等式
- 3081. 替换字符串中的问号使分数最小:练局部最优策略选择。
- 1969. 数组元素的最小非零乘积:练局部最优策略选择。
- 2939. 最大异或乘积:练局部最优策略选择。
- 3723. 数位平方和的最大值:练局部最优策略选择。
- 2897. 对数组执行操作使平方和最大:练局部最优策略选择。
中位数贪心
- 462. 最小操作次数使数组元素相等 II:练局部最优策略选择。
- 2033. 获取单值网格的最小操作数:练局部最优策略选择。
- 2448. 使数组相等的最小开销:练局部最优策略选择。
- 2607. 使子数组元素和相等:练局部最优策略选择。
- 2967. 使数组成为等数数组的最小代价:练局部最优策略选择。
- 1478. 安排邮筒:练局部最优策略选择。
- 2968. 执行操作使频率分数最大:练局部最优策略选择。
- 1703. 得到连续 K 个 1 的最少相邻交换次数:练局部最优策略选择。
- 3762. 使数组元素相等的最小操作次数:练局部最优策略选择。
- 3086. 拾起 K 个 1 需要的最少行动次数:练局部最优策略选择。
- LCP 24. 数字游戏:练局部最优策略选择。
- 3441. 变成好标题的最少代价:练局部最优策略选择。
- 棋盘整理:练局部最优策略选择。
- 296. 最佳的碰头地点:练局部最优策略选择;会员题二维。
归纳法
- 2952. 需要添加的硬币的最小数量:练局部最优策略选择。
- 330. 按要求补齐数组:练局部最优策略选择;同 2952 题。
- 1798. 你能构造出连续值的最大数目:练局部最优策略选择。
其他数学贪心
- 1414. 和为 K 的最少斐波那契数字数目:练局部最优策略选择。
- 3107. 使数组中位数等于 K 的最少操作数:练局部最优策略选择。
- 754. 到达终点数字:练局部最优策略选择。
- 1058. 最小化舍入误差以满足目标:练局部最优策略选择,会员题。
思维题
从特殊到一般
- 2745. 构造最长的新字符串:练局部最优策略选择。
- 2611. 老鼠和奶酪:练局部最优策略选择。
- 1029. 两地调度:练局部最优策略选择;同 2611 题。
- 2645. 构造有效字符串的最少插入数:练局部最优策略选择。
- 2202. K 次操作后最大化顶端元素:练局部最优策略选择。
- 2568. 最小无法得到的或值:练局部最优策略选择。
- 1702. 修改后的最大二进制字符串:练局部最优策略选择。
- 3012. 通过操作使数组长度最小:练局部最优策略选择。
- 2350. 不可能得到的最短骰子序列:练局部最优策略选择。
- 3660. 跳跃游戏 IX:练局部最优策略选择。
- 517. 超级洗衣机:练局部最优策略选择。
- 2499. 让数组不相等的最小总代价:练局部最优策略选择。
- 3357. 最小化相邻元素的最大差值:练局部最优策略选择。
- 3431. 对数字排序的最小解锁下标:练局部最优策略选择,会员题。
脑筋急转弯
- 2733. 既不是最小值也不是最大值:练局部最优策略选择。
- 3432. 统计元素和差值为偶数的分区方案:练局部最优策略选择。
- 1903. 字符串中的最大奇数:练局部最优策略选择。
- 2549. 统计桌面上的不同数字:练局部最优策略选择。
- 3746. 等量移除后的字符串最小长度:练局部最优策略选择。
- 2396. 严格回文的数字:练局部最优策略选择。
- 1689. 十-二进制数的最少数目:练局部最优策略选择。
- 3760. 不同首字母的子字符串数目:练局部最优策略选择。
- 3674. 数组元素相等的最小操作次数:练局部最优策略选择。
- 3689. 最大子数组总值 I:练局部最优策略选择。
- 598. 区间加法 II:练局部最优策略选择。
- 521. 最长特殊序列 Ⅰ:练局部最优策略选择。
- 3675. 转换字符串的最小操作次数:练局部最优策略选择。
- 3227. 字符串元音游戏:练局部最优策略选择。
- 3638. 平衡装运的最大数量:练局部最优策略选择。
- 3702. 按位异或非零的最长子序列:练局部最优策略选择。
- 3810. 变成目标数组的最少操作次数:练局部最优策略选择。
- 2419. 按位与最大的最长子数组:练局部最优策略选择。
- 3424. 将数组变相同的最小代价:练局部最优策略选择。
- 1992. 找到所有的农场组:练局部最优策略选择。
- 1007. 行相等的最少多米诺旋转:练局部最优策略选择。
- 2811. 判断是否能拆分数组:练局部最优策略选择。
- 463. 岛屿的周长:练局部最优策略选择。
- 2211. 统计道路上的碰撞次数:练局部最优策略选择。
- 3207. 与敌人战斗后的最大分数:练局部最优策略选择。
- 3828. 删除子数组后的最终元素:练局部最优策略选择。
- 3471. 找出最大的几近缺失整数:练局部最优策略选择;做到 O(n)。
- 2546. 执行逐位运算使字符串相等:练局部最优策略选择。
- 1503. 所有蚂蚁掉下来前的最后一刻:练局部最优策略选择。
- 2860. 让所有学生保持开心的分组方法数:练局部最优策略选择。
- 1332. 删除回文子序列:练局部最优策略选择。
- 1975. 最大方阵和:练局部最优策略选择。
- 1145. 二叉树着色游戏:练局部最优策略选择。
- 1297. 子串的最大出现次数:练局部最优策略选择。
- 3577. 统计计算机解锁顺序排列数:练局部最优策略选择。
- 3282. 到达数组末尾的最大得分:练局部最优策略选择。
- 3644. 排序排列:练局部最优策略选择。
- 2712. 使所有字符相等的最小成本:练局部最优策略选择。
- 3148. 矩阵中的最大得分:练局部最优策略选择。
- 2311. 小于等于 K 的最长二进制子序列:练局部最优策略选择。
- 2332. 坐上公交的最晚时间:练局部最优策略选择。
- 2680. 最大或值:练局部最优策略选择。
- 2731. 移动机器人:练局部最优策略选择。
- 2556. 二进制矩阵中翻转最多一次使路径不连通:练局部最优策略选择。
- 3353. 最小总操作数:练局部最优策略选择,会员题。
- 1708. 长度为 K 的最大子数组:练局部最优策略选择,会员题。
- 3596. 最小花费路径交替方向 I:练局部最优策略选择,会员题。
- 3496. 最大化配对删除后的得分:练局部最优策略选择,会员题。
- 3125. 使得按位与结果为 0 的最大数字:练局部最优策略选择,会员题。
- 1794. 统计距离最小的子串对个数:练局部最优策略选择,会员题。
等价转换
- 453. 最小操作次数使数组元素相等:练局部最优策略选择。
- 3375. 使数组的值全部为 K 的最少操作次数:练局部最优策略选择。
- 2914. 使二进制字符串变美丽的最少修改次数:练局部最优策略选择。
- 3365. 重排子字符串以形成目标字符串:练局部最优策略选择。
- 1657. 确定两个字符串是否接近:练局部最优策略选择。
- 2551. 将珠子放入背包中:练局部最优策略选择。
- 391. 完美矩形:练局部最优策略选择。
- 1585. 检查字符串是否可以通过排序子字符串得到另一个字符串:练局部最优策略选择。
- 1040. 移动石子直到连续 II:练局部最优策略选择。
- 249. 移位字符串分组:练局部最优策略选择,会员题。
- 49. 字母异位词分组:练局部最优策略选择。
- 1183. 矩阵中 1 的最大数量:练局部最优策略选择,会员题。
逆向思维
- 2139. 得到目标值的最少行动次数:练局部最优策略选择。
- 3779. 得到互不相同元素的最少操作次数:练局部最优策略选择。
- 3396. 使数组元素互不相同所需的最少操作次数:练局部最优策略选择;同 3779 题。
- 3147. 从魔法师身上吸取的最大能量:练局部最优策略选择。
- 869. 重新排序得到 2 的幂:练局部最优策略选择。
- 1558. 得到目标数组的最少函数调用次数:练局部最优策略选择。
- 554. 砖墙:练局部最优策略选择。
- 780. 到达终点:练局部最优策略选择。
- 417. 太平洋大西洋水流问题:练局部最优策略选择。
- 991. 坏了的计算器:练局部最优策略选择。
- 2227. 加密解密字符串:练局部最优策略选择。
- 1354. 多次求和构造目标数组:练局部最优策略选择。
- 2543. 判断一个点是否可以到达:练局部最优策略选择。
- 3307. 找出第 K 个字符 II:练局部最优策略选择。
- 3614. 用特殊操作处理字符串 II:练局部最优策略选择。
- 3419. 图的最大边权的最小值:练局部最优策略选择。
- 1611. 使整数变为 0 的最少操作次数:练局部最优策略选择。
- 3609. 到达目标点的最小移动次数:练局部最优策略选择。
- 936. 戳印序列:练局部最优策略选择。
- 782. 变为棋盘:练局部最优策略选择。
- 683. K 个关闭的灯泡:练局部最优策略选择;会员题做到 O(n)。
- 3141. 最大汉明距离:练局部最优策略选择,会员题。
- 3607. 电网维护:练局部最优策略选择。
- 2718. 查询后矩阵的和:练局部最优策略选择。
- 3639. 变为活跃状态的最小时间:练局部最优策略选择。
- 1970. 你能穿过矩阵的最后一天:练局部最优策略选择。
- 2382. 删除操作后的最大子段和:练局部最优策略选择。
- 803. 打砖块:练局部最优策略选择。
贡献法
- 2063. 所有子字符串中的元音:练元素贡献拆分。
- 979. 在二叉树中分配硬币:练元素贡献拆分。
- 1588. 所有奇数长度子数组的和:练元素贡献拆分;做到 O(n)。
- 3771. 探索地牢的得分:练元素贡献拆分。
- 2477. 到达首都的最少油耗:练元素贡献拆分。
- 2681. 英雄的力量:练元素贡献拆分。
- 3786. 树组的交互代价总和:练元素贡献拆分。
- 891. 子序列宽度之和:练元素贡献拆分。
- 3428. 最多 K 个元素的子序列的最值之和:练元素贡献拆分。
- 3426. 所有安放棋子方案的曼哈顿距离:练元素贡献拆分。
- 2763. 所有子数组中不平衡数字之和:练元素贡献拆分。
两次扫描
- 135. 分发糖果:练局部最优策略选择。
- 3796. 找到带限制序列的最大值:练局部最优策略选择。
- 3494. 酿造药水需要的最少总时间:练局部最优策略选择。
- 1840. 最高建筑高度:练局部最优策略选择。
分类讨论
- 2525. 根据规则将箱子分类:练局部最优策略选择。
- 860. 柠檬水找零:练局部最优策略选择。
- 2165. 重排数字的最小值:练局部最优策略选择。
- 2091. 从数组中移除最大值和最小值:练局部最优策略选择。
- 2078. 两栋颜色不同且距离最远的房子:练局部最优策略选择;非暴力做法。
- 1033. 移动石子直到连续:练局部最优策略选择。
- 2918. 数组的最小相等和:练局部最优策略选择。
- 2591. 将钱分给最多的儿童:练局部最优策略选择。
- 2131. 连接两字母单词得到的最长回文串:练局部最优策略选择。
- 3789. 采购的最小花费:练局部最优策略选择。
- 2844. 生成特殊数字的最少操作:练局部最优策略选择。
- 1247. 交换字符使得字符串相同:练局部最优策略选择。
- 838. 推多米诺:练局部最优策略选择。
- 2170. 使数组变成交替数组的最少操作数:练局部最优策略选择。
- 2202. K 次操作后最大化顶端元素:练局部最优策略选择。
- 2982. 找出出现至少三次的最长特殊子字符串 II:练局部最优策略选择。
- 3724. 转换数组的最少操作次数:练局部最优策略选择。
- 3001. 捕获黑皇后需要的最少移动次数:练局部最优策略选择。
- 2423. 删除字符使频率相同:练局部最优策略选择;非暴力做法。
- 2934. 最大化数组末位元素的最少操作次数:练局部最优策略选择。
- 3800. 使二进制字符串相等的最小成本:练局部最优策略选择。
- 2162. 设置时间的最少代价:练局部最优策略选择。
- 3440. 重新安排会议得到最多空余时间 II:练局部最优策略选择。
- 2508. 添加边使所有节点度数都为偶数:练局部最优策略选择。
- 3240. 最少翻转次数使二进制矩阵回文 II:练局部最优策略选择。
- 3548. 等和矩阵分割 II:练局部最优策略选择。
- 2468. 根据限制分割消息:练局部最优策略选择。
- 420. 强密码检验器:练局部最优策略选择。
- 3609. 到达目标点的最小移动次数:练局部最优策略选择。
- 1040. 移动石子直到连续 II:练局部最优策略选择。
- 335. 路径交叉:练局部最优策略选择。
- 1330. 翻转子数组得到最大的数组值:练局部最优策略选择。
- 3197. 包含所有 1 的最小矩形面积 II:练局部最优策略选择。
- 3366. 最小数组和:练局部最优策略选择;做到 O(nlogn)。
- 2499. 让数组不相等的最小总代价:练局部最优策略选择。
- 3311. 构造符合图结构的二维矩阵:练局部最优策略选择。
- 3139. 使数组中所有元素相等的最小开销:练局部最优策略选择。
- 3017. 按距离统计房屋对数目 II:练局部最优策略选择。
- 2983. 回文串重新排列查询:练局部最优策略选择。
- 3395. 唯一中间众数子序列 I:练局部最优策略选择。
- 3357. 最小化相邻元素的最大差值:练局部最优策略选择。
- 1900. 最佳运动员的比拼回合:练局部最优策略选择;做到 O(logn) 或者 O(1)。
- LCP 48. 无限棋局:练局部最优策略选择。
- LCP 21. 追逐游戏:练局部最优策略选择。
构造题
- 1304. 和为零的 N 个不同整数:练局部最优策略选择。
- 942. 增减字符串匹配:练局部最优策略选择。
- 1968. 构造元素不等于两相邻元素平均值的数组:练局部最优策略选择;做法不止一种,见我在官解下的 评论。
- 1253. 重构 2 行二进制矩阵:练局部最优策略选择。
- 1317. 将整数转换为两个无零整数的和:练局部最优策略选择;做到 O(logn)。进阶问题:最小化 a。
- 3513. 不同 XOR 三元组的数目 I:练局部最优策略选择。
- 2182. 构造限制重复的字符串:练局部最优策略选择。
- 3592. 硬币面值还原:练局部最优策略选择。
- 969. 煎饼排序:练局部最优策略选择。
- 406. 根据身高重建队列:练局部最优策略选择。
- 1605. 给定行和列的和求可行矩阵:练局部最优策略选择。
- 2375. 根据模式串构造最小数字:练局部最优策略选择;做到 O(n)。
- 324. 摆动排序 II:练局部最优策略选择。
- 667. 优美的排列 II:练局部最优策略选择。
- 2122. 还原原数组:练局部最优策略选择。
- 1980. 找出不同的二进制字符串:练局部最优策略选择;做到 O(n)。
- 3680. 生成赛程:练局部最优策略选择。
- 932. 漂亮数组:练局部最优策略选择。
- 2790. 长度递增组的最大数目:练局部最优策略选择。
- 3311. 构造符合图结构的二维矩阵:练局部最优策略选择。
- 2573. 找出对应 LCP 矩阵的字符串:练局部最优策略选择。
- 1982. 从子集的和还原数组:练局部最优策略选择。
- 280. 摆动排序:练局部最优策略选择,会员题。
- 484. 寻找排列:练局部最优策略选择,会员题。
交互题
- 278. 第一个错误的版本:练局部最优策略选择。
- 374. 猜数字大小:练局部最优策略选择。
- 1237. 找出给定方程的正整数解:练局部最优策略选择;非暴力做法。
- 1095. 山脉数组中查找目标值:练局部最优策略选择。
- 843. 猜猜这个单词:练局部最优策略选择。
- 2728. 计算一个环形街道上的房屋数量:练局部最优策略选择,会员题。
- 277. 搜寻名人:练局部最优策略选择,会员题。
- 2782. 唯一类别的数量:练局部最优策略选择,会员题。
- 3064. 使用按位查询猜测数字 I:练局部最优策略选择,会员题。
- 3094. 使用按位查询猜测数字 II:练局部最优策略选择,会员题。
- 1428. 至少有一个 1 的最左端列:练局部最优策略选择,会员题。
- 702. 搜索长度未知的有序数组:练局部最优策略选择,会员题。
- 1533. 找到最大整数的索引:练局部最优策略选择,会员题。
- 2936. 包含相等值数字块的数量:练局部最优策略选择,会员题。
- 1618. 找出适应屏幕的最大字号:练局部最优策略选择,会员题。
- 1538. 找出隐藏数组中出现次数最多的元素:练局部最优策略选择,会员题。
- 489. 扫地机器人:练局部最优策略选择,会员题。
- 1778. 未知网格中的最短路径:练局部最优策略选择,会员题。
- 1810. 隐藏网格下的最小消耗路径:练局部最优策略选择,会员题。
- 1274. 矩形内船只的数目:练局部最优策略选择,会员题。
其他
- 2740. 找出分区值:练局部最优策略选择。
- 3523. 非递减数组的最大长度:练局部最优策略选择。
- 781. 森林中的兔子:练局部最优策略选择。
- 3587. 最小相邻交换至奇偶交替:练局部最优策略选择。
- 1864. 构成交替字符串需要的最小交换次数:练局部最优策略选择。
- 1899. 合并若干三元组以形成目标三元组:练局部最优策略选择。
- 2498. 青蛙过河 II:练局部最优策略选择。
- 134. 加油站:练局部最优策略选择。
- 3443. K 次修改后的最大曼哈顿距离:练局部最优策略选择。
- 3635. 最早完成陆地和水上游乐设施的时间 II:练局部最优策略选择。
- 3002. 移除后集合的最多元素数:练局部最优策略选择。
- 1733. 需要教语言的最少人数:练局部最优策略选择。
- 659. 分割数组为连续子序列:练局部最优策略选择。
- 2732. 找到矩阵中的好子集:练局部最优策略选择。
- LCP 03. 机器人大冒险:练局部最优策略选择。
- LCP 26. 导航装置:练局部最优策略选择。
- LCP 70. 沙地治理:练局部最优策略选择。
- 2340. 生成有效数组的最少交换次数:练局部最优策略选择,会员题。
- 3460. 最多删除一次后的最长公共前缀:练局部最优策略选择;会员题证明。
- 2753. 计算一个环形街道上的房屋数量 II:练局部最优策略选择,会员题。
链表、树与回溯
链表
遍历链表
- 1290. 二进制链表转整数:练指针操作与链表拆拼。
- 2058. 找出临界点之间的最小和最大距离:练指针操作与链表拆拼。
- 2181. 合并零之间的节点:练指针操作与链表拆拼。
- 725. 分隔链表:练指针操作与链表拆拼。
- 817. 链表组件:练指针操作与链表拆拼。
- 3263. 将双链表转换为数组 I:练指针操作与链表拆拼,会员题。
- 3294. 将双链表转换为数组 II:练指针操作与链表拆拼,会员题。
- 3062. 链表游戏的获胜者:练指针操作与链表拆拼,会员题。
- 3063. 链表频率:练指针操作与链表拆拼,会员题。
删除节点
- 203. 移除链表元素:练指针操作与链表拆拼。
- 3217. 从链表中移除在数组中存在的节点:练指针操作与链表拆拼。
- 83. 删除排序链表中的重复元素:练指针操作与链表拆拼。
- 82. 删除排序链表中的重复元素 II:练指针操作与链表拆拼。
- 237. 删除链表中的节点:练指针操作与链表拆拼。
- 1669. 合并两个链表:练指针操作与链表拆拼。
- 2487. 从链表中移除节点:练指针操作与链表拆拼。
- 1836. 从未排序的链表中移除重复元素:练指针操作与链表拆拼,会员题。
插入节点
- 2807. 在链表中插入最大公约数:练指针操作与链表拆拼。
- 147. 对链表进行插入排序:练指针操作与链表拆拼。
- LCR 029. 循环有序列表的插入:练指针操作与链表拆拼。
- 708. 循环有序列表的插入:练指针操作与链表拆拼,会员题。
- 2046. 给按照绝对值排序的链表排序:练指针操作与链表拆拼,会员题。
反转链表
- 206. 反转链表:练指针操作与链表拆拼。
- 92. 反转链表 II:练指针操作与链表拆拼。
- 24. 两两交换链表中的节点:练指针操作与链表拆拼。
- 25. K 个一组翻转链表:练指针操作与链表拆拼。
- 2074. 反转偶数长度组的节点:练指针操作与链表拆拼。
前后指针
- 19. 删除链表的倒数第 N 个结点:练指针操作与链表拆拼。
- 61. 旋转链表:练指针操作与链表拆拼。
- 1721. 交换链表中的节点:练指针操作与链表拆拼。
- 1474. 删除链表 M 个节点之后的 N 个节点:练指针操作与链表拆拼,会员题。
快慢指针
- 876. 链表的中间结点:练指针操作与链表拆拼。
- 2095. 删除链表的中间节点:练指针操作与链表拆拼。
- 234. 回文链表:练指针操作与链表拆拼。
- 2130. 链表最大孪生和:练指针操作与链表拆拼。
- 143. 重排链表:练指针操作与链表拆拼。
- 141. 环形链表:练指针操作与链表拆拼。
- 142. 环形链表 II:练指针操作与链表拆拼。
- 457. 环形数组是否存在循环:练指针操作与链表拆拼。
- 2674. 拆分循环链表:练指针操作与链表拆拼,会员题。
- 287. 寻找重复数:练指针操作与链表拆拼。
- 1015. 可被 K 整除的最小整数:练指针操作与链表拆拼。
- 3790. 最小全 1 倍数:练指针操作与链表拆拼;同 1015 题。
双指针
合并链表
- 2. 两数相加:练指针操作与链表拆拼。
- 445. 两数相加 II:练指针操作与链表拆拼。
- 2816. 翻倍以链表形式表示的数字:练指针操作与链表拆拼。
- 21. 合并两个有序链表:练指针操作与链表拆拼。
- 369. 给单链表加一:练指针操作与链表拆拼,会员题。
- 1634. 求两个多项式链表的和:练指针操作与链表拆拼,会员题。
分治
- 23. 合并 K 个升序链表:练指针操作与链表拆拼;也可以用堆。
- 148. 排序链表:练指针操作与链表拆拼。
综合应用
- 1019. 链表中的下一个更大节点:练指针操作与链表拆拼。
- 1171. 从链表中删去总和值为零的连续节点:练指针操作与链表拆拼。
- 707. 设计链表:练指针操作与链表拆拼。
- 146. LRU 缓存:练指针操作与链表拆拼。
- 460. LFU 缓存:练指针操作与链表拆拼。
- 432. 全 O(1) 的数据结构:练指针操作与链表拆拼。
- 1206. 设计跳表:练指针操作与链表拆拼。
其他
- 138. 随机链表的复制:练指针操作与链表拆拼。
- 382. 链表随机节点:练指针操作与链表拆拼。
- 430. 扁平化多级双向链表:练指针操作与链表拆拼。
- 1265. 逆序打印不可变链表:练指针操作与链表拆拼,会员题。
二叉树
遍历二叉树
- 144. 二叉树的前序遍历:练指针操作与链表拆拼。
- 94. 二叉树的中序遍历:练指针操作与链表拆拼。
- 145. 二叉树的后序遍历:练指针操作与链表拆拼。
- 872. 叶子相似的树:练指针操作与链表拆拼。
- LCP 44. 开幕式焰火:练指针操作与链表拆拼。
- 404. 左叶子之和:练指针操作与链表拆拼。
- 671. 二叉树中第二小的节点:练指针操作与链表拆拼。
- 1469. 寻找所有的独生节点:练指针操作与链表拆拼,会员题。
- 1214. 查找两棵二叉搜索树之和:练指针操作与链表拆拼,会员题。
- 2764. 数组是否表示某二叉树的前序遍历:练指针操作与链表拆拼,会员题。
自顶向下 DFS(先序遍历)
- 104. 二叉树的最大深度:练遍历搜索与状态标记。
- 111. 二叉树的最小深度:练遍历搜索与状态标记。
- 112. 路径总和:练遍历搜索与状态标记。
- 129. 求根节点到叶节点数字之和:练遍历搜索与状态标记。
- 199. 二叉树的右视图:练遍历搜索与状态标记。
- 1448. 统计二叉树中好节点的数目:练遍历搜索与状态标记。
- 1315. 祖父节点值为偶数的节点和:练遍历搜索与状态标记。
- 988. 从叶结点开始的最小字符串:练遍历搜索与状态标记。
- 1026. 节点与其祖先之间的最大差值:练遍历搜索与状态标记。
- 1022. 从根到叶的二进制数之和:练遍历搜索与状态标记。
- 623. 在二叉树中增加一行:练遍历搜索与状态标记。
- 1372. 二叉树中的最长交错路径:练遍历搜索与状态标记。
- 971. 翻转二叉树以匹配先序遍历:练遍历搜索与状态标记。
- 2689. 从 Rope 树中提取第 K 个字符:练遍历搜索与状态标记,会员题。
- 298. 二叉树最长连续序列:练遍历搜索与状态标记,会员题。
- 1430. 判断给定的序列是否是二叉树从根到叶的路径:练遍历搜索与状态标记,会员题。
- 545. 二叉树的边界:练遍历搜索与状态标记,会员题。
自底向上 DFS(后序遍历)
- 104. 二叉树的最大深度:练遍历搜索与状态标记。
- 111. 二叉树的最小深度:练遍历搜索与状态标记。
- 965. 单值二叉树:练遍历搜索与状态标记。
- 100. 相同的树:练遍历搜索与状态标记。
- 101. 对称二叉树:练遍历搜索与状态标记。
- 951. 翻转等价二叉树:练遍历搜索与状态标记。
- 1379. 找出克隆二叉树中的相同节点:练遍历搜索与状态标记。
- 110. 平衡二叉树:练遍历搜索与状态标记。
- 226. 翻转二叉树:练遍历搜索与状态标记。
- 617. 合并二叉树:练遍历搜索与状态标记。
- 2331. 计算布尔二叉树的值:练遍历搜索与状态标记。
- 508. 出现次数最多的子树元素和:练遍历搜索与状态标记。
- 563. 二叉树的坡度:练遍历搜索与状态标记。
- 606. 根据二叉树创建字符串:练遍历搜索与状态标记。
- 2265. 统计值等于子树平均值的节点数:练遍历搜索与状态标记。
- 1026. 节点与其祖先之间的最大差值:练遍历搜索与状态标记。
- 3319. 第 K 大的完美二叉子树的大小:练遍历搜索与状态标记。
- 1339. 分裂二叉树的最大乘积:练遍历搜索与状态标记。
- 1372. 二叉树中的最长交错路径:练遍历搜索与状态标记。
- 1145. 二叉树着色游戏:练遍历搜索与状态标记。
- 572. 另一棵树的子树:练遍历搜索与状态标记;做到 O(n) 时间。
- 1530. 好叶子节点对的数量:练遍历搜索与状态标记;做到低于 O(n2) 时间。
- LCP 67. 装饰树:练遍历搜索与状态标记。
- 298. 二叉树最长连续序列:练遍历搜索与状态标记,会员题。
- 250. 统计同值子树:练遍历搜索与状态标记,会员题。
- 1973. 值等于子节点值之和的节点数量:练遍历搜索与状态标记,会员题。
- 663. 均匀树划分:练遍历搜索与状态标记,会员题。
- 1120. 子树的最大平均值:练遍历搜索与状态标记,会员题。
- 2792. 计算足够大的节点数:练遍历搜索与状态标记,会员题。
- 333. 最大二叉搜索子树:练遍历搜索与状态标记,会员题。
- 366. 寻找二叉树的叶子节点:练遍历搜索与状态标记,会员题。
- 156. 上下翻转二叉树:练遍历搜索与状态标记,会员题。
- 1612. 检查两棵二叉表达式树是否等价:练遍历搜索与状态标记,会员题。
自底向上 DFS:删点
- 814. 二叉树剪枝:练遍历搜索与状态标记。
- 1325. 删除给定值的叶子节点:练遍历搜索与状态标记。
- 1110. 删点成林:练遍历搜索与状态标记。
有递有归
- 538. 把二叉搜索树转换为累加树:练指针操作与链表拆拼;也可以用外部变量记录和。
- 1038. 从二叉搜索树到更大和树:练指针操作与链表拆拼;同 538 题。
- 865. 具有所有最深节点的最小子树:练指针操作与链表拆拼;也可以自底向上。
- 1080. 根到叶路径上的不足节点:练指针操作与链表拆拼。
二叉树的直径
- 543. 二叉树的直径:练指针操作与链表拆拼。
- 687. 最长同值路径:练指针操作与链表拆拼。
- 124. 二叉树中的最大路径和:练指针操作与链表拆拼。
- 2385. 感染二叉树需要的总时间:练指针操作与链表拆拼。
- 549. 二叉树最长连续序列 II:练指针操作与链表拆拼,会员题。
回溯
- 257. 二叉树的所有路径:练指针操作与链表拆拼。
- 113. 路径总和 II:练指针操作与链表拆拼。
- 1457. 二叉树中的伪回文路径:练指针操作与链表拆拼。
- 437. 路径总和 III:练指针操作与链表拆拼。
最近公共祖先
- 235. 二叉搜索树的最近公共祖先:练指针操作与链表拆拼。
- 236. 二叉树的最近公共祖先:练指针操作与链表拆拼。
- 1123. 最深叶节点的最近公共祖先:练指针操作与链表拆拼。
- 2096. 从二叉树一个节点到另一个节点每一步的方向:练指针操作与链表拆拼。
- 1740. 找到二叉树中的距离:练指针操作与链表拆拼,会员题。
- 1644. 二叉树的最近公共祖先 II:练指针操作与链表拆拼,会员题。
- 1650. 二叉树的最近公共祖先 III:练指针操作与链表拆拼,会员题。
- 1676. 二叉树的最近公共祖先 IV:练指针操作与链表拆拼,会员题。
二叉搜索树
- 700. 二叉搜索树中的搜索:练指针操作与链表拆拼。
- 530. 二叉搜索树的最小绝对差:练指针操作与链表拆拼。
- 783. 二叉搜索树节点最小距离:练指针操作与链表拆拼;同 530 题。
- 938. 二叉搜索树的范围和:练指针操作与链表拆拼。
- 501. 二叉搜索树中的众数:练指针操作与链表拆拼。
- 230. 二叉搜索树中第 K 小的元素:练指针操作与链表拆拼。
- 98. 验证二叉搜索树:练指针操作与链表拆拼。
- 1305. 两棵二叉搜索树中的所有元素:练指针操作与链表拆拼。
- 99. 恢复二叉搜索树:练指针操作与链表拆拼。
- 897. 递增顺序搜索树:练指针操作与链表拆拼。
- 2476. 二叉搜索树最近节点查询:练指针操作与链表拆拼。
- 653. 两数之和 IV - 输入二叉搜索树:练指针操作与链表拆拼。
- 1373. 二叉搜索子树的最大键值和:练指针操作与链表拆拼。
- 1932. 合并多棵二叉搜索树:练指针操作与链表拆拼。
- 285. 二叉搜索树中的中序后继:练指针操作与链表拆拼,会员题。
- 510. 二叉搜索树中的中序后继 II:练指针操作与链表拆拼,会员题。
- 270. 最接近的二叉搜索树值:练指针操作与链表拆拼,会员题。
- 272. 最接近的二叉搜索树值 II:练指针操作与链表拆拼,会员题。
- 255. 验证二叉搜索树的前序遍历序列:练指针操作与链表拆拼,会员题。
- 1902. 给定二叉搜索树的插入顺序求深度:练指针操作与链表拆拼,会员题。
创建二叉树
- 108. 将有序数组转换为二叉搜索树:练指针操作与链表拆拼。
- 654. 最大二叉树:练指针操作与链表拆拼。
- 998. 最大二叉树 II:练指针操作与链表拆拼。
- 1008. 前序遍历构造二叉搜索树:练指针操作与链表拆拼。
- 1382. 将二叉搜索树变平衡:练指针操作与链表拆拼。
- 2196. 根据描述创建二叉树:练指针操作与链表拆拼。
- 105. 从前序与中序遍历序列构造二叉树:练指针操作与链表拆拼。
- 106. 从中序与后序遍历序列构造二叉树:练指针操作与链表拆拼。
- 889. 根据前序和后序遍历构造二叉树:练指针操作与链表拆拼。
- 1028. 从先序遍历还原二叉树:练指针操作与链表拆拼。
- 536. 从字符串生成二叉树:练指针操作与链表拆拼,会员题。
- 1628. 设计带解析函数的表达式树:练指针操作与链表拆拼,会员题。
- 1597. 根据中缀表达式构造二叉表达式树:练指针操作与链表拆拼,会员题。
插入/删除节点
- 701. 二叉搜索树中的插入操作:练指针操作与链表拆拼。
- 450. 删除二叉搜索树中的节点:练指针操作与链表拆拼。
- 669. 修剪二叉搜索树:练指针操作与链表拆拼。
- 776. 拆分二叉搜索树:练指针操作与链表拆拼,会员题。
- 1666. 改变二叉树的根节点:练指针操作与链表拆拼,会员题。
树形 DP
- 337. 打家劫舍 III:练树上状态转移。
- 968. 监控二叉树:练树上状态转移。
- LCP 10. 二叉树任务调度:练树上状态转移。
- LCP 34. 二叉树染色:练树上状态转移。
- LCP 64. 二叉树灯饰:练树上状态转移。
- 2313. 二叉树中得到结果所需的最少翻转次数:练树上状态转移,会员题。
二叉树 BFS
- 102. 二叉树的层序遍历:练层序扩展与最短路。
- 103. 二叉树的锯齿形层序遍历:练层序扩展与最短路。
- 107. 二叉树的层序遍历 II:练层序扩展与最短路。
- 199. 二叉树的右视图:练层序扩展与最短路;也可以 DFS。
- 513. 找树左下角的值:练层序扩展与最短路。
- 515. 在每个树行中找最大值:练层序扩展与最短路。
- 637. 二叉树的层平均值:练层序扩展与最短路。
- 1161. 最大层内元素和:练层序扩展与最短路。
- 993. 二叉树的堂兄弟节点:练层序扩展与最短路。
- 2583. 二叉树中的第 K 大层和:练层序扩展与最短路。
- 1302. 层数最深叶子节点的和:练层序扩展与最短路。
- 2415. 反转二叉树的奇数层:练层序扩展与最短路。
- 1609. 奇偶树:练层序扩展与最短路。
- 623. 在二叉树中增加一行:练层序扩展与最短路。
- 2471. 逐层排序二叉树所需的最少操作数目:练层序扩展与最短路。
- 2641. 二叉树的堂兄弟节点 II:练层序扩展与最短路。
- 919. 完全二叉树插入器:练层序扩展与最短路。
- 958. 二叉树的完全性检验:练层序扩展与最短路。
- 863. 二叉树中所有距离为 K 的结点:练层序扩展与最短路。
- 662. 二叉树最大宽度:练层序扩展与最短路。
- 3157. 找到具有最小和的树的层数:练层序扩展与最短路,会员题。
- 3831. 二叉搜索树某一层的中位数:练层序扩展与最短路,会员题。
- 1602. 找到二叉树中最近的右侧节点:练层序扩展与最短路,会员题。
- 742. 二叉树最近的叶节点:练层序扩展与最短路,会员题。
- 1660. 纠正二叉树:练层序扩展与最短路,会员题。
链表+二叉树
- 114. 二叉树展开为链表:练指针操作与链表拆拼。
- 1367. 二叉树中的链表:练指针操作与链表拆拼。
- 109. 有序链表转换二叉搜索树:练指针操作与链表拆拼。
- 116. 填充每个节点的下一个右侧节点指针:练指针操作与链表拆拼;做到 O(1) 空间。
- 117. 填充每个节点的下一个右侧节点指针 II:练指针操作与链表拆拼;做到 O(1) 空间。
- 426. 将二叉搜索树转化为排序的双向链表:练指针操作与链表拆拼,会员题。
N 叉树
- 589. N 叉树的前序遍历:练指针操作与链表拆拼。
- 590. N 叉树的后序遍历:练指针操作与链表拆拼。
- 559. N 叉树的最大深度:练指针操作与链表拆拼。
- 429. N 叉树的层序遍历:练指针操作与链表拆拼。
- 427. 建立四叉树:练指针操作与链表拆拼。
- 558. 四叉树交集:练指针操作与链表拆拼。
- 428. 序列化和反序列化 N 叉树:练指针操作与链表拆拼,会员题。
- 1490. 克隆 N 叉树:练指针操作与链表拆拼,会员题。
- 1506. 找到 N 叉树的根节点:练指针操作与链表拆拼,会员题。
- 1522. N 叉树的直径:练指针操作与链表拆拼,会员题。
- 1516. 移动 N 叉树的子树:练指针操作与链表拆拼,会员题。
其他
- 1261. 在受污染的二叉树中查找元素:练指针操作与链表拆拼。
- 1104. 二叉树寻路:练指针操作与链表拆拼。
- 987. 二叉树的垂序遍历:练指针操作与链表拆拼。
- 655. 输出二叉树:练指针操作与链表拆拼。
- 979. 在二叉树中分配硬币:练指针操作与链表拆拼。
- 222. 完全二叉树的节点个数:练指针操作与链表拆拼;做到低于 O(n) 时间。
- 297. 二叉树的序列化与反序列化:练指针操作与链表拆拼。
- 449. 序列化和反序列化二叉搜索树:练指针操作与链表拆拼。
- 331. 验证二叉树的前序序列化:练指针操作与链表拆拼。
- 652. 寻找重复的子树:练指针操作与链表拆拼。
- 173. 二叉搜索树迭代器:练指针操作与链表拆拼。
- 2049. 统计最高分的节点数目:练指针操作与链表拆拼。
- 2673. 使二叉树所有路径值相等的最小代价:练指针操作与链表拆拼。
- 2509. 查询树中环的长度:练指针操作与链表拆拼。
- 2458. 移除子树后的二叉树高度:练指针操作与链表拆拼。
- LCP 26. 导航装置:练指针操作与链表拆拼。
- LCP 60. 力扣泡泡龙:练指针操作与链表拆拼。
- 314. 二叉树的垂直遍历:练指针操作与链表拆拼,会员题。
- 666. 路径总和 IV:练指针操作与链表拆拼,会员题。
- 1586. 二叉搜索树迭代器 II:练指针操作与链表拆拼,会员题。
- 2773. 特殊二叉树的高度:练指针操作与链表拆拼,会员题。
- 1485. 克隆含随机指针的二叉树:练指针操作与链表拆拼,会员题。
- 2445. 值为 1 的节点数:练指针操作与链表拆拼,会员题。
- 431. 将 N 叉树编码为二叉树:练指针操作与链表拆拼,会员题。
- 2005. 斐波那契树的移除子树游戏:练指针操作与链表拆拼,会员题。
一般树
遍历
- 2368. 受限条件下可到达节点的数目:练指针操作与链表拆拼。
- 1466. 重新规划路线:练指针操作与链表拆拼。
- 582. 杀掉进程:练指针操作与链表拆拼,会员题。
自顶向下 DFS
- 1376. 通知所有员工所需的时间:练遍历搜索与状态标记。
- 3528. 单位转换 I:练遍历搜索与状态标记。
- 1443. 收集树上所有苹果的最少时间:练遍历搜索与状态标记。
- 3820. 树上的勾股距离节点:练遍历搜索与状态标记。
- 1377. T 秒后青蛙的位置:练遍历搜索与状态标记。
- 3067. 在带权树网络中统计可连接服务器对数目:练遍历搜索与状态标记。
- 3372. 连接两棵树后最大目标节点数目 I:练遍历搜索与状态标记。
- 2467. 树上最大得分和路径:练遍历搜索与状态标记。
- 3373. 连接两棵树后最大目标节点数目 II:练遍历搜索与状态标记。
- 1766. 互质树:练遍历搜索与状态标记。
- 2791. 树中可以形成回文的路径数:练遍历搜索与状态标记。
- 3535. 单位转换 II:练遍历搜索与状态标记,会员题。
自底向上 DFS
- 690. 员工的重要性:练遍历搜索与状态标记。
- 3249. 统计好节点的数目:练遍历搜索与状态标记。
- 1519. 子树中标签相同的节点数:练遍历搜索与状态标记。
- 3558. 给边赋权值的方案数 I:练遍历搜索与状态标记。
- 3593. 使叶子路径成本相等的最小增量:练遍历搜索与状态标记。
- 2872. 可以被 K 整除连通块的最大数目:练遍历搜索与状态标记。
- 2477. 到达首都的最少油耗:练遍历搜索与状态标记。
- 3812. 翻转树上最少边:练遍历搜索与状态标记。
- 2973. 树中每个节点放置的金币数目:练遍历搜索与状态标记。
- 2440. 创建价值相同的连通块:练遍历搜索与状态标记。
- 1273. 删除树节点:练遍历搜索与状态标记,会员题。
- 3004. 相同颜色的最大子树:练遍历搜索与状态标记,会员题。
有递有归
- 3593. 使叶子路径成本相等的最小增量:练指针操作与链表拆拼;也可以自底向上。
- 3331. 修改后子树的大小:练指针操作与链表拆拼。
树的直径
- 2246. 相邻字符不同的最长路径:练指针操作与链表拆拼。
- 3203. 合并两棵树后的最小直径:练指针操作与链表拆拼。
- 1617. 统计子树中城市之间最大距离:练指针操作与链表拆拼。
- 2538. 最大价值和与最小价值和的差值:练指针操作与链表拆拼。
- 1245. 树的直径:练指针操作与链表拆拼,会员题。
- 3787. 查找树的直径端点:练指针操作与链表拆拼,会员题。
- 3313. 查找树中最后标记的节点:练指针操作与链表拆拼,会员题。
树的拓扑排序
- 310. 最小高度树:练入度建模与有向图处理。
- 3812. 翻转树上最少边:练入度建模与有向图处理。
- 2603. 收集树中金币:练入度建模与有向图处理。
DFS 时间戳
- 3515. 带权树中的最短路径:练遍历搜索与状态标记。
- LCP 05. 发 LeetCoin:练遍历搜索与状态标记;同 3515 题。
- 2322. 从树中删除边的最小分数:练遍历搜索与状态标记。
- 3327. 判断 DFS 字符串是否是回文串:练遍历搜索与状态标记。
- 3590. 第 K 小的路径异或和:练遍历搜索与状态标记;做法不止一种。
最近公共祖先(LCA)、倍增算法
- 1483. 树节点的第 K 个祖先:练指针操作与链表拆拼。
- 3559. 给边赋权值的方案数 II:练指针操作与链表拆拼。
- 3553. 包含给定路径的最小带权子树 II:练指针操作与链表拆拼。
- 3585. 树中找到带权中位节点:练指针操作与链表拆拼。
- 2846. 边权重均等查询:练指针操作与链表拆拼。
- 2646. 最小化旅行的价格总和:练指针操作与链表拆拼。
- 2277. 树中最接近路径的节点:练指针操作与链表拆拼,会员题。
- 3534. 针对图的路径存在性查询 II:练指针操作与链表拆拼。
- 2836. 在传球游戏中最大化函数值:练指针操作与链表拆拼;做法不止一种。
- 3464. 正方形上的点之间的最大距离:练指针操作与链表拆拼。
虚树
- 3786. 树组的交互代价总和:练指针操作与链表拆拼。
树上启发式合并
- 2003. 每棵子树内缺失的最小基因值:练指针操作与链表拆拼。
- 3590. 第 K 小的路径异或和:练指针操作与链表拆拼。
- 3575. 最大好子树分数:练指针操作与链表拆拼;做到 O(nlogn⋅2D)。
点分治
- 3372. 连接两棵树后最大目标节点数目 I:练指针操作与链表拆拼。
树上滑动窗口
- 3425. 最长特殊路径:练指针操作与链表拆拼。
- 3486. 最长特殊路径 II:练指针操作与链表拆拼。
其他
- 2867. 统计树中的合法路径数目:练指针操作与链表拆拼。
- 2421. 好路径的数目:练指针操作与链表拆拼。
- 1719. 重构一棵树的方案数:练指针操作与链表拆拼。
- 2479. 两个不重叠子树的最大异或值:练指针操作与链表拆拼,会员题。
回溯
入门回溯
- 17. 电话号码的字母组合:练基础模型与状态定义。
子集型回溯
- 78. 子集:练指针操作与链表拆拼。
- 1863. 找出所有子集的异或总和再求和:练指针操作与链表拆拼。
- 784. 字母大小写全排列:练指针操作与链表拆拼。
- 3566. 等积子集的划分方案:练指针操作与链表拆拼。
- 2044. 统计按位或能得到最大值的子集数目:练指针操作与链表拆拼。
- LCP 51. 烹饪料理:练指针操作与链表拆拼。
- 2397. 被列覆盖的最多行数:练指针操作与链表拆拼。
- 1239. 串联字符串的最大长度:练指针操作与链表拆拼。
- 2212. 射箭比赛中的最大得分:练指针操作与链表拆拼。
- 1255. 得分最高的单词集合:练指针操作与链表拆拼。
- 2151. 基于陈述统计最多好人数:练指针操作与链表拆拼。
- 2597. 美丽子集的数目:练指针操作与链表拆拼。
- 2959. 关闭分部的可行集合数目:练指针操作与链表拆拼。
- 1601. 最多可达成的换楼请求数目:练指针操作与链表拆拼。
- 1617. 统计子树中城市之间最大距离:练指针操作与链表拆拼。
- 2174. 通过翻转行或列来去除所有的 1 II:练指针操作与链表拆拼,会员题。
- 320. 列举单词的全部缩写:练指针操作与链表拆拼,会员题。
- 254. 因子的组合:练指针操作与链表拆拼,会员题。
- 39. 组合总和:练指针操作与链表拆拼;同一个数可以重复选。
- 2002. 两个回文子序列长度的最大乘积:练指针操作与链表拆拼。
划分型回溯
- 131. 分割回文串:练区间划分与状态设计。
- 2698. 求一个整数的惩罚数:练区间划分与状态设计。
- 1593. 拆分字符串使唯一子字符串的数目最大:练区间划分与状态设计。
- 1849. 将字符串拆分为递减的连续值:练区间划分与状态设计。
- 93. 复原 IP 地址:练区间划分与状态设计。
- 140. 单词拆分 II:练区间划分与状态设计。
- 291. 单词规律 II:练区间划分与状态设计,会员题。
组合型回溯
- 77. 组合:练组合计数与构造。
- 216. 组合总和 III:练组合计数与构造。
- 1286. 字母组合迭代器:练组合计数与构造。
- 22. 括号生成:练组合计数与构造。
- 301. 删除无效的括号:练组合计数与构造。
排列型回溯
- 46. 全排列:练指针操作与链表拆拼。
- 3799. 单词方块 II:练指针操作与链表拆拼。
- 3376. 破解锁的最少时间 I:练指针操作与链表拆拼。
- 51. N 皇后:练指针操作与链表拆拼。
- 52. N 皇后 II:练指针操作与链表拆拼。
- 2850. 将石头分散到网格图的最少移动次数:练指针操作与链表拆拼。
- 1718. 构建字典序最大的可行序列:练指针操作与链表拆拼。
- 1307. 口算难题:练指针操作与链表拆拼。
- 37. 解数独:练指针操作与链表拆拼。
- 3437. 全排列 III:练指针操作与链表拆拼,会员题。
- 267. 回文排列 II:练指针操作与链表拆拼,会员题。
有重复元素的回溯
- 90. 子集 II:练指针操作与链表拆拼。
- 40. 组合总和 II:练指针操作与链表拆拼。
- 491. 非递减子序列:练指针操作与链表拆拼。
- 47. 全排列 II:练指针操作与链表拆拼。
- 1079. 活字印刷:练指针操作与链表拆拼。
- 3646. 下一个特殊回文数:练指针操作与链表拆拼。
- 2014. 重复 K 次的最长子序列:练指针操作与链表拆拼。
搜索
- 3211. 生成不含相邻零的二进制字符串:练指针操作与链表拆拼。
- 967. 连续差相同的数字:练指针操作与链表拆拼。
- 2094. 找出 3 位偶数:练指针操作与链表拆拼。
- 1415. 长度为 n 的开心字符串中字典序第 k 小的字符串:练指针操作与链表拆拼。
- 1219. 黄金矿工:练指针操作与链表拆拼。
- 79. 单词搜索:练指针操作与链表拆拼。
- 980. 不同路径 III:练指针操作与链表拆拼。
- 2002. 两个回文子序列长度的最大乘积:练指针操作与链表拆拼。
- 1255. 得分最高的单词集合:练指针操作与链表拆拼。
- 3669. K 因数分解:练指针操作与链表拆拼。
- 756. 金字塔转换矩阵:练指针操作与链表拆拼。
- 473. 火柴拼正方形:练指针操作与链表拆拼。
- 212. 单词搜索 II:练指针操作与链表拆拼。
- 638. 大礼包:练指针操作与链表拆拼。
- 1240. 铺瓷砖:练指针操作与链表拆拼。
- 679. 24 点游戏:练指针操作与链表拆拼。
- 282. 给表达式添加运算符:练指针操作与链表拆拼。
- 126. 单词接龙 II:练指针操作与链表拆拼。
- 691. 贴纸拼词:练指针操作与链表拆拼。
- 2056. 棋盘上有效移动组合的数目:练指针操作与链表拆拼。
- 2386. 找出数组的第 K 大和:练指针操作与链表拆拼。
- 3509. 最大化交错和为 K 的子序列乘积:练指针操作与链表拆拼。
- 488. 祖玛游戏:练指针操作与链表拆拼。
- LCP 58. 积木拼接:练指针操作与链表拆拼。
- 面试题 17.25. 单词矩阵:练指针操作与链表拆拼。
- 2664. 巡逻的骑士:练指针操作与链表拆拼,会员题。
- 3565. 顺序网格路径覆盖:练指针操作与链表拆拼,会员题。
- 247. 中心对称数 II:练指针操作与链表拆拼,会员题。
- 248. 中心对称数 III:练指针操作与链表拆拼,会员题。
- 411. 最短独占单词缩写:练指针操作与链表拆拼,会员题。
- 1088. 易混淆数 II:练指针操作与链表拆拼,会员题。
折半枚举
- 805. 数组的均值分割:练指针操作与链表拆拼。
- 494. 目标和:练指针操作与链表拆拼。
- 3566. 等积子集的划分方案:练指针操作与链表拆拼。
- 1755. 最接近目标值的子序列和:练指针操作与链表拆拼。
- 956. 最高的广告牌:练指针操作与链表拆拼。
- 2035. 将数组分成两个数组并最小化数组和的差:练指针操作与链表拆拼。
- 3801. 合并有序列表的最小成本:练指针操作与链表拆拼。
- 3267. 统计近似相等数对 II:练指针操作与链表拆拼。
- LCP 82. 万灵之树:练指针操作与链表拆拼。
其他递归/分治
- 3537. 填充特殊网格:练指针操作与链表拆拼。
- 215. 数组中的第K个最大元素:练指针操作与链表拆拼。
- 912. 排序数组:练指针操作与链表拆拼。
- 880. 索引处的解码字符串:练指针操作与链表拆拼。
- 3307. 找出第 K 个字符 II:练指针操作与链表拆拼。
- 1545. 找出第 N 个二进制字符串中的第 K 位:练指针操作与链表拆拼;做到 O(n)。
- 3614. 用特殊操作处理字符串 II:练指针操作与链表拆拼。
- 932. 漂亮数组:练指针操作与链表拆拼。
字符串
KMP(前缀的后缀)
- 28. 找出字符串中第一个匹配项的下标:练模式匹配与失配回退。
- 796. 旋转字符串:练模式匹配与失配回退;做到线性时间复杂度。
- 1392. 最长快乐前缀:练模式匹配与失配回退。
- 3036. 匹配模式数组的子数组数目 II:练模式匹配与失配回退。
- 1764. 通过连接另一个数组的子数组得到一个数组:练模式匹配与失配回退;做到线性时间复杂度。
- 1668. 最大重复子字符串:练模式匹配与失配回退;做到线性时间复杂度。
- 459. 重复的子字符串:练模式匹配与失配回退;做到线性时间复杂度。
- 2800. 包含三个字符串的最短字符串:练模式匹配与失配回退;做到线性时间复杂度。
- 3008. 找出数组中的美丽下标 II:练模式匹配与失配回退。
- 214. 最短回文串:练模式匹配与失配回退;也可以用 Manacher 算法。
- 3529. 统计水平子串和垂直子串重叠格子的数目:练模式匹配与失配回退。
- 686. 重复叠加字符串匹配:练模式匹配与失配回退。
- 3455. 最短匹配子字符串:练模式匹配与失配回退。
- 1397. 找到所有好字符串:练模式匹配与失配回退。
- 3037. 在无限流中寻找模式 II:练模式匹配与失配回退;会员题同 28 题。
- 3571. 最短超级串 II:练模式匹配与失配回退;会员题联系 2800 题。
Z 函数(后缀的前缀)
- 2223. 构造字符串的总得分和:练前缀匹配长度维护。
- 3031. 将单词恢复初始状态所需的最短时间 II:练前缀匹配长度维护。
- 3045. 统计前后缀下标对 II:练前缀匹配长度维护。
- 3303. 第一个几乎相等子字符串的下标:练前缀匹配长度维护。
- 3292. 形成目标字符串需要的最少字符串数 II:练前缀匹配长度维护。
- 3474. 字典序最小的生成字符串:练前缀匹配长度维护;做到 O(n+m)。
- 2430. 对字母串可执行的最大删除数:练前缀匹配长度维护。
- 3388. 统计数组中的美丽分割:练前缀匹配长度维护。
- 1977. 划分数字的方案数:练前缀匹配长度维护。
Manacher 算法(回文串)
- 5. 最长回文子串:练回文半径扩展。
- 647. 回文子串:练回文半径扩展。
- 214. 最短回文串:练回文半径扩展。
- 3327. 判断 DFS 字符串是否是回文串:练回文半径扩展。
- 1745. 分割回文串 IV:练回文半径扩展;做到 O(n)。
- 1960. 两个回文子字符串长度的最大乘积:练回文半径扩展。
- 3844. 最长的准回文子字符串:练回文半径扩展;做到 O(nlogn)。
- 3504. 子字符串连接后的最长回文串 II:练回文半径扩展;做到 O(n+m)。
- 5. 最长回文子串:练回文半径扩展。
- 3844. 最长的准回文子字符串:练回文半径扩展。
- 2472. 不重叠回文子字符串的最大数目:练回文半径扩展。
- 3504. 子字符串连接后的最长回文串 II:练回文半径扩展。
- 3615. 图中的最长回文路径:练回文半径扩展。
- 3579. 字符串转换需要的最小操作数:练回文半径扩展;做到 O(n2)。
字符串哈希
- 28. 找出字符串中第一个匹配项的下标:练子串哈希比对。
- 187. 重复的 DNA 序列:练子串哈希比对。
- 1316. 不同的循环子字符串:练子串哈希比对。
- 1297. 子串的最大出现次数:练子串哈希比对;做到 O(n)。
- 2261. 含最多 K 个可整除元素的子数组:练子串哈希比对;做到 O(n2)。
- 3722. 反转后字典序最小的字符串:练子串哈希比对;做到 O(nlogn)。
- 3213. 最小代价构造字符串:练子串哈希比对。
- 1367. 二叉树中的链表:练子串哈希比对;做到线性。
- 1044. 最长重复子串:练子串哈希比对。
- 718. 最长重复子数组:练子串哈希比对。
- 1923. 最长公共子路径:练子串哈希比对。
- 3292. 形成目标字符串需要的最少字符串数 II:练子串哈希比对。
- 3844. 最长的准回文子字符串:练子串哈希比对;做到 O(nlogn) 或 O(n)。
- 2168. 每个数字的频率都相同的独特子字符串的数量:练子串哈希比对;会员题同 2261 题。
- 1554. 只有一个不同字符的字符串:练子串哈希比对,会员题。
- 1062. 最长重复子串:练子串哈希比对;会员题同 1044 题。
最小表示法
- 899. 有序队列:练该小节核心套路。
- 3403. 从盒子中找出字典序最大的字符串 I:练该小节核心套路。
- 1625. 执行操作后字典序最小的字符串:练该小节核心套路。
- 3406. 从盒子中找出字典序最大的字符串 II:练该小节核心套路,会员题。
- 1708. 长度为 K 的最大子数组:练该小节核心套路;会员题见进阶问题。
AC 自动机
- 1032. 字符流:练多模式匹配。
- 面试题 17.17. 多次搜索:练多模式匹配。
- 1408. 数组中的字符串匹配:练多模式匹配;做到线性时间复杂度。
- 3213. 最小代价构造字符串:练多模式匹配。
- 2781. 最长合法子字符串的长度:练多模式匹配。
- 3292. 形成目标字符串需要的最少字符串数 II:练多模式匹配。
- 3758. 将数字词转换为数字:练多模式匹配;会员题更通用的做法。
后缀数组/后缀自动机
- 1163. 按字典序排在最后的子串:练后缀排序与 LCP。
- 1754. 构造字典序最大的合并字符串:练后缀排序与 LCP;做到 O(n+m)。
- 2904. 最短且字典序最小的美丽子字符串:练后缀排序与 LCP;做到 O(nlogn)。
- 3722. 反转后字典序最小的字符串:练后缀排序与 LCP;做到 O(nlogn)。
- 3213. 最小代价构造字符串:练后缀排序与 LCP。
- 1044. 最长重复子串:练后缀排序与 LCP。
- 718. 最长重复子数组:练后缀排序与 LCP。
- 1923. 最长公共子路径:练后缀排序与 LCP。
- 1408. 数组中的字符串匹配:练后缀排序与 LCP。
- 3729. 统计有序数组中可被 K 整除的子数组数量:练后缀排序与 LCP;不保证数组非递增的做法 本质不同子数组。
- 3076. 数组中的最短非公共子字符串:练后缀排序与 LCP。
- 3844. 最长的准回文子字符串:练后缀排序与 LCP;做到 O(nlogn)。
- 3504. 子字符串连接后的最长回文串 II:练后缀排序与 LCP;做到 O(n+m)。
- 1316. 不同的循环子字符串:练后缀排序与 LCP。
- 3388. 统计数组中的美丽分割:练后缀排序与 LCP;做到 O(nlogn) 或 O(n)。
- 2564. 子字符串异或查询:练后缀排序与 LCP。
- 面试题 16.18. 模式匹配:练后缀排序与 LCP。
- 1698. 字符串的不同子字符串个数:练后缀排序与 LCP,会员题。
- 1062. 最长重复子串:练后缀排序与 LCP;会员题同 1044 题。
- 3135. 通过添加或删除结尾字符来同化字符串:练后缀排序与 LCP,会员题。
子序列自动机
- 792. 匹配子序列的单词数:练该小节核心套路。
- 514. 自由之路:练该小节核心套路;做到 O(nm)。
- 2014. 重复 K 次的最长子序列:练该小节核心套路。
- 1055. 形成字符串的最短路径:练该小节核心套路,会员题。
- 727. 最小窗口子序列:练该小节核心套路,会员题。
其他
- 3485. 删除元素后 K 个字符串的最长公共前缀:练补充套路与扩展变形。
- 466. 统计重复个数:练补充套路与扩展变形;做到 O(∣s1∣+∣s2∣)。
- 3491. 电话号码前缀:练补充套路与扩展变形;会员题非暴力做法。
方法 B:随机训练
专题训练的优点是体系化,缺点是你会提前知道题目大致属于什么类型。可一旦到了比赛、笔试或真实面试,题目不会主动告诉你“我是动态规划”还是“我是贪心”。
所以在刷完一轮专题后,建议加入随机训练:
- 打开 难度练习
- 从自己当前能稳定思考的难度开始,例如
1500左右 - 不看题型标签,先自己判断信号和解法方向
- 做完后再复盘:这题为什么应该想到这个模型?
随机训练的核心目标,不是扩题量,而是训练“识别题型”的能力。
方法 C:突击训练
如果已经临近面试,没有很多时间完整刷专题,可以直接做高频面试题单:
如果时间特别紧,优先保证 HOT 100 的完成度和复盘质量。
常见问题
1. 一个专题完全不会,应该怎么开始?
最稳妥的做法不是一上来硬做,而是先看一遍对应专题的讲解资料,再从低难度题开始做。前 5~10 题的目标不是追求速度,而是建立“这个专题通常长什么样”的感觉。
2. 卡多久再看题解比较合适?
如果 15 分钟后仍然没有方向,可以适当看提示;如果已经有方向,但总在细节上绕圈,可以再坚持一会儿。关键不在于“绝不看题解”,而在于看完以后必须自己独立重写。
3. 动态规划为什么总是学不会?
动态规划本来就是很多人的第一道门槛。它不像滑动窗口那样有明显模板,需要不断练习状态设计、转移来源和初始化细节。入门阶段不要急着追求“秒做”,先把前几类经典模型反复做熟。
4. 怎么根据数据范围大致猜复杂度?
| 数据范围 | 常见可接受复杂度 | 常见方法 |
|---|---|---|
n ≤ 10 |
O(n!) / 组合爆搜 |
回溯、暴力搜索 |
n ≤ 20 |
O(2^n) |
状压 DP |
n ≤ 40 |
O(2^(n/2)) |
折半枚举 |
n ≤ 10^2 |
O(n^3) |
Floyd、三重循环 DP |
n ≤ 10^3 |
O(n^2) |
二重循环 DP、背包 |
n ≤ 10^5 |
O(n log n) |
排序、二分、堆、树状结构 |
n ≤ 10^6 |
O(n) |
双指针、滑动窗口、线性 DP |
n ≤ 10^9 |
O(log n) / O(1) |
二分、快速幂、数学推导 |
这张表不需要死背,但建议有一个大致量感。很多题的第一突破口,恰恰是先根据数据范围排除错误方向。
总结
对刷题新人来说,更推荐这条节奏:
- 先补基础实现题,避免一开始就被语法和细节绊住
- 再按专题系统推进,建立知识地图
- 之后加入随机训练,锻炼识别题型的能力
- 面试前集中刷高频题单,提升命中率
比起“今天做了多少题”,更重要的是:你有没有真正积累下可复用的解题方法。