滑動視窗與雙指標
滑動視窗就是在陣列或字串上維護一段區間,讓左右兩端往前推,不必把每個子陣列重算一遍。雙指標是同一種想法,用在一個或兩個序列上。很多暴力枚舉的題目,換成這兩招就只要掃一次。
六個章節從定長視窗開始,接著是會伸縮的不定長視窗,再來是單序列雙指標、雙序列雙指標、三指標,最後是分組迴圈。這是整條路線的第一份題單,剛開始刷 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 分數,會標示為「未評分」。
進入書房