滑动窗口与双指针
滑动窗口就是在数组或字符串上维护一段区间,让左右两端往前挪,不用把每个子数组重新算一遍。双指针是同一个思路,用在一个或两个序列上。很多暴力枚举的题,换成这两种写法只需要扫一遍。
六个章节从定长窗口开始,接着是可伸缩的不定长窗口,然后是单序列双指针、双序列双指针、三指针,最后是分组循环。这是整条路线的第一份题单,刚开始刷 LeetCode,或者停了一段时间想找回手感,都适合从这里起步。
194 道题难度分 1165–28066 章节
进入书房
想有人陪你把这份题单做完吗?登录后进入书房,女主角会一次递给你一道题。
一、Fixed-Length Sliding Window
§1.1 基础
| 题目 | 难度分 |
|---|---|
| 1456. 定长子串中元音的最大数目 | 1263 |
| 643. 子数组最大平均数 I | 1263 |
| 1343. 大小为 K 且平均值大于等于阈值的子数组数目 | 1317 |
| 2090. 半径为 k 的子数组平均值 | 1358 |
| 2379. 得到 K 个黑块的最少涂色次数 | 1360 |
| 2841. 几乎唯一子数组的最大和 | 1546 |
| 2461. 长度为 K 子数组中的最大和 | 1553 |
| 1423. 可获得的最大点数 | 1574 |
§1.2 进阶(选做)选做
| 题目 | 难度分 |
|---|---|
| 3679. 使库存平衡的最少丢弃次数 | 1639 |
| 1052. 爱生气的书店老板 | 1639 |
| 3439. 重新安排会议得到最多空余时间 I | 1729 |
| 3694. 删除子字符串后不同的终点 | 1739 |
| 3652. 按策略买卖股票的最佳时机 | 1739 |
| 2134. 最少交换次数来组合所有的 1 II | 1748 |
| 1652. 拆炸弹 | 1748 |
| 1297. 子串的最大出现次数 | 1748 |
| 2653. 滑动子数组的美丽值 | 1786 |
| 1888. 使二进制字符串字符交替的最少反转次数 | 2006 |
| 567. 字符串的排列 | 2006 |
| 438. 找到字符串中所有字母异位词 | 2006 |
| 30. 串联所有单词的子串 | 2006 |
| 2156. 查找给定哈希值的子串 | 2063 |
| 2953. 统计完全子字符串 | 2449 |
| 1016. 子串能表示从 1 到 N 数字的二进制串 | 2063 |
§1.3 其他(选做)选做
| 题目 | 难度分 |
|---|---|
| 2200. 找出数组中的所有 K 近邻下标 | 1266 |
| 2269. 找到一个数字的 K 美丽值 | 1280 |
| 1984. 学生分数的最小差值 | 1306 |
| 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串 | 1504 |
| 220. 存在重复元素 III | 1504 |
二、Dynamic-Length Sliding Window
§2.1 越短越合法/求最长/最大
§2.2 越长越合法/求最短/最小
| 题目 | 难度分 |
|---|---|
| 209. 长度最小的子数组 | 1263 |
| 2904. 最短且字典序最小的美丽子字符串 | 1914 |
| 1234. 替换子串得到平衡字符串 | 1878 |
| 2875. 无限数组的最短子数组 | 1914 |
| 76. 最小覆盖子串 | 1592 |
| 632. 最小区间 | 1592 |
§2.3 求subarray个数
§2.4 其他(选做)选做
| 题目 | 难度分 |
|---|---|
| 825. 适龄的朋友 | 1697 |
| 2401. 最长优雅子数组 | 1750 |
| 1156. 单字符重复子串的最大长度 | 1787 |
| 424. 替换后的最长重复字符 | 1787 |
| 438. 找到字符串中所有字母异位词 | 1787 |
| 1712. 将数组分成三个子数组的方案数 | 2079 |
三、单序列 Two Pointers
§3.1 相向 Two Pointers
| 题目 | 难度分 |
|---|---|
| 344. 反转字符串 | 1263 |
| 3643. 垂直翻转子矩阵 | 1235 |
| 541. 反转字符串 II | 1263 |
| 557. 反转字符串中的单词 III | 1263 |
| 345. 反转字符串中的元音字母 | 1263 |
| 917. 仅仅反转字母 | 1263 |
| 125. 验证回文串 | 1263 |
| 1750. 删除字符串两端相同字符后的最短长度 | 1502 |
| 2105. 给植物浇水 II | 1507 |
| 977. 有序数组的平方 | 1263 |
| 658. 找到 K 个最接近的元素 | 1263 |
| 1471. 数组中的 K 个最强值 | 1263 |
| 167. 两数之和 II - 输入有序数组 | 1263 |
| 633. 平方数之和 | 1263 |
| 2824. 统计和小于目标的下标对数目 | 1263 |
| 2563. 统计公平数对的数目 | 1263 |
| 15. 三数之和 | 1263 |
| 16. 最接近的三数之和 | 1263 |
| 18. 四数之和 | 1263 |
| 611. 有效三角形的个数 | 1263 |
| 1577. 数的平方等于两数乘积的方法数 | 1263 |
| 923. 三数之和的多种可能 | 1711 |
| 948. 令牌放置 | 1762 |
| 11. 盛最多水的容器 | 1263 |
| 42. 接雨水 | 1263 |
| 1616. 分割两个字符串得到回文串 | 1868 |
| 1498. 满足条件的子序列数目 | 2276 |
| 1782. 统计点对的数目 | 2457 |
§3.2 同向 Two Pointers
| 题目 | 难度分 |
|---|---|
| 611. 有效三角形的个数 | 1263 |
| 3649. 完美对的数目 | 1716 |
| 1574. 删除最短的子数组使剩余数组有序 | 1932 |
| 2972. 统计移除递增子数组的数目 II | 2153 |
| 2122. 还原原数组 | 2159 |
| 2234. 花园的最大总美丽值 | 2562 |
§3.3 背向 Two Pointers
| 题目 | 难度分 |
|---|---|
| 1793. 好子数组的最大分数 | 1946 |
| 976. 三角形的最大周长 | 1263 |
§3.4 原地修改
| 题目 | 难度分 |
|---|---|
| 27. 移除元素 | 1263 |
| 26. 删除有序数组中的重复项 | 1263 |
| 80. 删除有序数组中的重复项 II | 1263 |
| 2273. 移除字母异位词后的结果数组 | 1295 |
| 3684. 至多 K 个不同元素的最大和 | 1263 |
| 283. 移动零 | 1263 |
| 905. 按奇偶排序数组 | 1263 |
| 922. 按奇偶排序数组 II | 1263 |
| 3467. 将数组按照奇偶性转化 | 1263 |
| 2460. 对数组执行操作 | 1263 |
| 1089. 复写零 | 1263 |
| 75. 颜色分类 | 1263 |
四、双序列 Two Pointers
§4.1 Two Pointers
| 题目 | 难度分 |
|---|---|
| 2109. 向字符串添加空格 | 1315 |
| 2540. 最小公共值 | 1315 |
| 88. 合并两个有序数组 | 1315 |
| 2570. 合并两个二维数组 - 求和法 | 1315 |
| 350. 两个数组的交集 II | 1315 |
| 1855. 下标对中的最大距离 | 1515 |
| 1385. 两个数组间的距离值 | 1315 |
| 925. 长按键入 | 1315 |
| 809. 情感丰富的文字 | 1605 |
| 2337. 移动片段得到字符串 | 1693 |
| 777. 在 LR 字符串中交换相邻字符 | 1693 |
| 844. 比较含退格的字符串 | 1315 |
| 986. 区间列表的交集 | 1315 |
| 1537. 最大得分 | 1961 |
§4.2 判断subsequence
| 题目 | 难度分 |
|---|---|
| 392. 判断子序列 | 1315 |
| 524. 通过删除字母匹配到字典里最长单词 | 1315 |
| 2486. 追加字符以获得子序列 | 1363 |
| 2825. 循环增长使字符串子序列等于另一个字符串 | 1415 |
| 1023. 驼峰式匹配 | 1537 |
| 3132. 找出与数组相加的整数 II | 1620 |
| 522. 最长特殊序列 II | 1700 |
| 1898. 可移除字符的最大数目 | 1913 |
| 2565. 最少得分子序列 | 2432 |
| 3302. 字典序最小的合法序列 | 2474 |
五、Three Pointers
基础题
| 题目 | 难度分 |
|---|---|
| 2367. 等差三元组的数目 | 1263 |
| 2563. 统计公平数对的数目 | 1721 |
| 795. 区间子数组个数 | 1817 |
| 2444. 统计定界子数组的数目 | 2093 |
| 3347. 执行操作后元素的最高频率 II | 2156 |
思维扩展
| 题目 | 难度分 |
|---|---|
| 3464. 正方形上的点之间的最大距离 | 2806 |
六、Grouped Loop
基础题
| 题目 | 难度分 |
|---|---|
| 485. 最大连续 1 的个数 | 1263 |
| 1446. 连续字符 | 1165 |
| 1869. 哪种连续子字符串更长 | 1205 |
| 2414. 最长的字母序连续子字符串的长度 | 1222 |
| 3456. 找出长度为 K 的特殊子字符串 | 1244 |
| 2273. 移除字母异位词后的结果数组 | 1295 |
| 2348. 全 0 子数组的数目 | 1316 |
| 1513. 仅含 1 的子串数 | 1351 |
| 1957. 删除字符使字符串变好 | 1358 |
| 674. 最长连续递增序列 | 1263 |
| 3708. 最长斐波那契子数组 | 1381 |
| 696. 计数二进制子串 | 1263 |
| 978. 最长湍流子数组 | 1393 |
| 2110. 股票平滑下跌阶段的数目 | 1408 |
| 228. 汇总区间 | 1263 |
| 2760. 最长奇偶子数组 | 1420 |
| 1887. 使数组元素相等的减少操作次数 | 1428 |
| 845. 数组中的最长山脉 | 1437 |
| 2038. 如果相邻两个颜色均相同则删除当前颜色 | 1468 |
| 2900. 最长相邻不相等子序列 I | 1469 |
| 1759. 统计同质子字符串的数目 | 1491 |
| 3011. 判断一个数组是否可以变为有序 | 1497 |
| 1578. 使绳子变成彩色的最短时间 | 1574 |
| 1839. 所有元音按顺序排布的最长子字符串 | 1580 |
| 2765. 最长交替子数组 | 1581 |
| 3255. 长度为 K 的子数组的能量值 II | 1595 |
| 3350. 检测相邻递增子数组 II | 1600 |
| 3105. 最长的严格递增或递减子数组 | 1600 |
| 838. 推多米诺 | 1638 |
| 467. 环绕字符串中唯一的子字符串 | 1700 |
| 3499. 操作后最大活跃区段数 I | 1729 |
| 413. 等差数列划分 | 1263 |
| 68. 文本左右对齐 | 1263 |
| 135. 分发糖果 | 1263 |
| 2948. 交换得到字典序最小的数组 | 2047 |
| 2593. 标记所有元素后数组的分数 | 1263 |
| 3640. 三段式数组 II | 2278 |
每条新路线都从这份题单的第一节开始;其中三个选做小节会单独标出,留到进阶题单再做,不会拖慢你的进度。
难度分来自 zerotrac 的 LeetCode 竞赛评分。部分题目没有 zerotrac 分数,会标记为“未评分”。
进入书房