扩展题单 Pattern 分类汇总(中文版)
目标:把你这份更大的题单重新按 pattern 汇总,方便刷题时按“题型”而不是按题名记忆
使用方法:先判断题目属于哪个 pattern,再从该组里按顺序推进
这个题型 / 算法点的总结
这份扩展题单的重点,是让你面对更大的题库时,依然按“题型”而不是按“题名”去组织知识。真正需要记住的不是长长的问题清单,而是每道题背后的识别信号:哈希、双指针、滑动窗口、二分、递归、图搜索、堆、动态规划。
题目含义
这页不是单独一道题,而是一个更大的 pattern 分类入口。为了让这页本身也能直接学习,下面用代表题 Longest Substring Without Repeating Characters 演示:怎么从“连续子串 + 不能重复”立刻想到滑动窗口。
Python 代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
left = 0
seen: dict[str, int] = {}
best = 0
for right, ch in enumerate(s):
if ch in seen and seen[ch] >= left:
left = seen[ch] + 1
seen[ch] = right
best = max(best, right - left + 1)
return best
print(Solution().lengthOfLongestSubstring('abcabcbb'))
时间复杂度
每个字符最多被窗口左右边界处理常数次,所以时间复杂度是 O(n)。
空间复杂度
哈希表要记录字符最后一次出现位置,所以空间复杂度是 O(min(n, 字符集大小))。
怎么想到
看到“最长子串”“连续区间”“满足某个限制条件”这几个词时,就要先警觉滑动窗口。因为题目要的不是离散选择,而是一段连续范围,并且这段范围的合法性会随着左右边界变化。这时最自然的做法就是:右边界不断扩张,窗口不合法时左边界再收缩。
示例 case
输入:s = "abcabcbb"
输出:3
解释:最长的不重复子串可以是 "abc"、"bca" 或 "cab"。
边界 case:如果输入是 "bbbbb",答案是 1,因为窗口里不能同时保留两个相同字符。
常见 Follow-up
- 如果题目改成“最多包含 k 个不同字符”,窗口里该维护什么状态?
- 哪些连续区间题适合滑动窗口,哪些反而更适合前缀和或动态规划?
- 如果题目不再要求连续子串,而是子序列,为什么通常要换思路?
一、总学习顺序
建议按这个顺序刷:
- 数组、双指针、滑动窗口
- 二分查找
- 链表
- 树与递归
- DFS / 回溯
- BFS / 图
- 栈与队列
- 动态规划
- 堆与 Top K
- 设计类
- 区间、数学及其他
原因:
// 前面先建立基础操作和识别能力
// 中间建立树图回溯模板
// 后面再做 DP、设计和综合题
二、数组、双指针与滑动窗口
识别信号
// 补数、频率、查重 -> 哈希
// 左右夹逼、有序数组、三元组 -> 双指针
// 连续子串 / 子数组、最长最短区间 -> 滑动窗口
// 原地修改、保持相对顺序 -> 快慢指针
核心子类
1. 哈希 / 基础数组
- Two Sum
- Group Anagrams
- Intersection of Two Arrays
- Intersection of Two Arrays II
- Single Number
- Find All Duplicates in an Array
- Find the Duplicate Number
关键:
// 用 dict / set 换时间
// 先查再存
2. 原地数组操作
- Move Zeroes
- Sort Colors
- Merge Sorted Array
- String Compression
- Next Permutation
关键:
// 边界指针含义必须非常清楚
// 哪一段已经处理好了,是这类题的核心
3. 双指针
- 3Sum
- 3Sum Closest
- Container With Most Water
- Squares of a Sorted Array
- Reverse String
- Valid Anagram
关键:
// 排序后固定一个数,再缩两边
// 或左右夹逼
4. 滑动窗口
- Longest Substring Without Repeating Characters
- Minimum Window Substring
- Longest Substring with At Most K Distinct Characters
- Max Consecutive Ones III
- Permutation in String
- Sliding Window Maximum
关键:
// 扩张窗口
// 直到不合法
// 再收缩到合法
推荐顺序
- Two Sum
- Move Zeroes
- Valid Anagram
- Reverse String
- Group Anagrams
- Intersection of Two Arrays
- Product of Array Except Self
- Sort Colors
- Merge Sorted Array
- Container With Most Water
- 3Sum
- Longest Substring Without Repeating Characters
- Permutation in String
- Minimum Window Substring
- Sliding Window Maximum
- Next Permutation
- Find the Duplicate Number
三、二分查找
识别信号
// 有序
// 旋转数组
// 第一个 / 最后一个
// 单调条件
// 找最小满足条件的值
基础二分
- Search in Rotated Sorted Array
- Find First and Last Position of Element in Sorted Array
- Find Peak Element
- Single Element in a Sorted Array
- Search a 2D Matrix
- Find Minimum in Rotated Sorted Array
- Search in Rotated Sorted Array II
- Search a 2D Matrix II
进阶二分 / 答案二分
- Random Pick with Weight
- Kth Smallest Element in a Sorted Matrix
- Median of Two Sorted Arrays
- Closest Binary Search Tree Value
- Find the Celebrity
推荐顺序
- Search a 2D Matrix
- Find First and Last Position of Element in Sorted Array
- Search in Rotated Sorted Array
- Find Minimum in Rotated Sorted Array
- Find Peak Element
- Single Element in a Sorted Array
- Search a 2D Matrix II
- Search in Rotated Sorted Array II
- Kth Smallest Element in a Sorted Matrix
- Random Pick with Weight
- Median of Two Sorted Arrays
重点总结
// 二分不是只能“找某个数”
// 它更本质是在利用单调性
四、链表
识别信号
// 反转
// 删除倒数第 k 个
// 合并有序链表
// 随机指针
// 重排 / 局部翻转
分类
1. 翻转与基础操作
- Reverse Linked List
- Reverse Linked List II
- Reorder List
- Remove Nth Node From End of List
2. 合并与计算
- Add Two Numbers
- Add Two Numbers II
- Merge Two Sorted Lists
- Merge k Sorted Lists
- Sort List
3. 特殊结构
- Intersection of Two Linked Lists
- Copy List with Random Pointer
推荐顺序
- Reverse Linked List
- Merge Two Sorted Lists
- Remove Nth Node From End of List
- Add Two Numbers
- Intersection of Two Linked Lists
- Reorder List
- Reverse Linked List II
- Copy List with Random Pointer
- Sort List
- Merge k Sorted Lists
- Add Two Numbers II
重点总结
// dummy
// 快慢指针
// 反转
// 合并
// 断开再接回去
五、树与递归
识别信号
// 深度、高度、路径、祖先、构造、序列化
// BST 有序性质
// 每层信息
分类
1. 遍历 / 视图
- Binary Tree Level Order Traversal
- Binary Tree Right Side View
- Binary Tree Vertical Order Traversal
- Vertical Order Traversal of a Binary Tree
- Find Largest Value in Each Tree Row
- Maximum Width of Binary Tree
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node II
2. 路径与和
- Binary Tree Maximum Path Sum
- Path Sum
- Path Sum II
- Path Sum III
- Sum Root to Leaf Numbers
3. 性质与转换
- Symmetric Tree
- Diameter of Binary Tree
- Flatten Binary Tree to Linked List
- Construct Binary Tree from Preorder and Inorder Traversal
- Lowest Common Ancestor of a Binary Tree
4. BST 与序列化
- Validate Binary Search Tree
- Lowest Common Ancestor of a Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Binary Search Tree to Sorted Doubly Linked List
- Kth Smallest Element in a BST
- Range Sum of BST
- Serialize and Deserialize Binary Tree
- Serialize and Deserialize BST
推荐顺序
- Symmetric Tree
- Binary Tree Level Order Traversal
- Binary Tree Right Side View
- Diameter of Binary Tree
- Path Sum
- Path Sum II
- Sum Root to Leaf Numbers
- Lowest Common Ancestor of a Binary Tree
- Flatten Binary Tree to Linked List
- Construct Binary Tree from Preorder and Inorder Traversal
- Validate Binary Search Tree
- Kth Smallest Element in a BST
- Lowest Common Ancestor of a Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Path Sum III
- Binary Tree Maximum Path Sum
- Serialize and Deserialize Binary Tree
- Serialize and Deserialize BST
重点总结
// 树题先选遍历方式
// 前序:构造
// 中序:BST
// 后序:子树信息
// 层序:每层视图
六、DFS / 回溯
识别信号
// 所有组合
// 所有排列
// 所有合法方案
// 尝试 + 回退
题目
- Subsets
- Permutations
- Combination Sum
- Generate Parentheses
- Letter Combinations of a Phone Number
- Restore IP Addresses
- Binary Tree Paths
- Word Break II
- Partition to K Equal Sum Subsets
推荐顺序
- Letter Combinations of a Phone Number
- Subsets
- Permutations
- Combination Sum
- Generate Parentheses
- Restore IP Addresses
- Binary Tree Paths
- Word Break II
- Partition to K Equal Sum Subsets
重点总结
// path 存什么
// start 从哪开始
// used 是否需要
// 什么条件下剪枝
七、BFS 与图
识别信号
// 最短路径
// 一层一层扩散
// 岛屿 / 连通块
// 依赖关系 / 拓扑排序
分类
1. BFS / 最短路径
- Word Ladder
- Word Ladder II
- Walls and Gates
- Shortest Distance from All Buildings
- The Maze
2. 连通分量 / 岛屿 / 搜索
- Number of Islands
- Max Area of Island
- Island Perimeter
- Battleships in a Board
- Is Graph Bipartite?
- Word Search
- Word Search II
3. 拓扑排序 / 依赖
- Course Schedule
- Course Schedule II
- Alien Dictionary
4. 其他图论
- Clone Graph
- Reconstruct Itinerary
- Pacific Atlantic Water Flow
- Accounts Merge
- All Nodes Distance K in Binary Tree
- Number of Connected Components in an Undirected Graph
- Minesweeper
推荐顺序
- Number of Islands
- Max Area of Island
- Island Perimeter
- Word Search
- Is Graph Bipartite?
- Course Schedule
- Course Schedule II
- Clone Graph
- Walls and Gates
- Pacific Atlantic Water Flow
- Word Ladder
- Word Ladder II
- Word Search II
- Accounts Merge
- Alien Dictionary
- Reconstruct Itinerary
重点总结
// 图题先分清:
// DFS 染色
// BFS 按层
// 拓扑排序
// 并查集 / 映射图
八、栈与队列
识别信号
// 括号匹配
// 表达式解析
// 单调关系
// 调用栈 / 时间片
分类
1. 单调栈 / 结构栈
- Trapping Rain Water
- Longest Valid Parentheses
2. 括号 / 计算器 / 解析
- Valid Parentheses
- Simplify Path
- Basic Calculator
- Basic Calculator II
- Basic Calculator III
- Decode String
3. 队列 / 栈模拟
- Design Circular Queue
- Exclusive Time of Functions
推荐顺序
- Valid Parentheses
- Simplify Path
- Decode String
- Basic Calculator II
- Basic Calculator
- Longest Valid Parentheses
- Trapping Rain Water
- Design Circular Queue
- Exclusive Time of Functions
- Basic Calculator III
重点总结
// 栈里存值还是存下标
// 弹栈时如何计算答案
// 计算器题核心是“何时结算前面的表达式”
九、动态规划
识别信号
// 最优值
// 多少种方法
// 能不能组成
// 重复子问题
分类
1. 序列 DP
- Climbing Stairs
- Fibonacci Number
- Best Time to Buy and Sell Stock
- Longest Increasing Subsequence
- Maximum Product Subarray
- Word Break
- Decode Ways
- Longest Palindromic Subsequence
2. 路径与子数组
- Maximum Subarray
- Unique Paths
- Unique Paths II
- Subarray Sum Equals K
- Continuous Subarray Sum
3. 字符串 / 匹配
- Longest Palindromic Substring
- Regular Expression Matching
- Wildcard Matching
- Longest Increasing Path in a Matrix
推荐顺序
- Fibonacci Number
- Climbing Stairs
- Best Time to Buy and Sell Stock
- Maximum Subarray
- Unique Paths
- Unique Paths II
- Decode Ways
- Word Break
- Longest Increasing Subsequence
- Maximum Product Subarray
- Longest Palindromic Substring
- Longest Palindromic Subsequence
- Continuous Subarray Sum
- Longest Increasing Path in a Matrix
- Regular Expression Matching
- Wildcard Matching
重点总结
// 先定义状态
// 再写转移
// 再想初始化
// 最后决定遍历顺序
十、堆与 Top K
识别信号
// top k
// 动态最大 / 最小
// 数据流
// 按优先级弹出
题目
- Kth Largest Element in an Array
- K Closest Points to Origin
- Top K Frequent Elements
- Top K Frequent Words
- Reorganize String
- Find Median from Data Stream
- Kth Largest Element in a Stream
推荐顺序
- Kth Largest Element in an Array
- K Closest Points to Origin
- Top K Frequent Elements
- Kth Largest Element in a Stream
- Top K Frequent Words
- Reorganize String
- Find Median from Data Stream
重点总结
// 小顶堆保留前 k 大
// 大顶堆处理最大优先
// 两个堆维护中位数
十一、设计类
识别信号
// 需要设计数据结构
// 多个操作都要高效
// insert / delete / get / iterator
题目
- LRU Cache
- Insert Delete GetRandom O(1)
- Implement Trie (Prefix Tree)
- Add and Search Word - Data structure design
- Design Tic-Tac-Toe
- Binary Search Tree Iterator
推荐顺序
- Implement Trie
- Binary Search Tree Iterator
- Design Tic-Tac-Toe
- Insert Delete GetRandom O(1)
- LRU Cache
- Add and Search Word
重点总结
// 先列操作
// 再确定每个操作复杂度目标
// 再选组合数据结构
十二、区间、数学及其他
分类
1. 区间
- Merge Intervals
- Insert Interval
- Meeting Rooms II
关键:
// 区间题几乎都先排序
2. 数学与矩阵
- Pow(x, n)
- Divide Two Integers
- Rotate Image
- Spiral Matrix
- Set Matrix Zeroes
3. 杂项 / 逻辑
- String to Integer (atoi)
- Roman to Integer
- First Missing Positive
- Longest Consecutive Sequence
- Palindrome Permutation
- Integer to English Words
- First Unique Character in a String
- Validate IP Address
- Task Scheduler
- Pancake Sorting
- Sudoku Solver
推荐顺序
- Merge Intervals
- Insert Interval
- Meeting Rooms II
- Rotate Image
- Spiral Matrix
- Set Matrix Zeroes
- Roman to Integer
- String to Integer (atoi)
- First Unique Character in a String
- Validate IP Address
- Longest Consecutive Sequence
- First Missing Positive
- Pow(x, n)
- Divide Two Integers
- Task Scheduler
- Sudoku Solver
- Integer to English Words
重点总结
// 这组题分散
// 不要混着刷
// 要先识别它更像哪类模板
十三、建议你怎么用这份题单
不要按网站顺序刷,按下面方式更有效:
第 1 轮:模板建立
每组先刷最基础的 3 到 5 题。
第 2 轮:同类强化
同一 pattern 连刷 5 到 10 题。
第 3 轮:综合难题
把每组最难的题拿出来集中突破。
十四、你可以这样标记题目
建议自己给每题打标签:
A:看题就知道模板B:能做出来,但不稳C:不会 or 需要看题解
然后复习顺序:
- 先清
C - 再压缩
B - 最后用
A维持手感
十五、最值得优先做的核心题
如果你现在不想被题海压住,先抓这批:
- Two Sum
- Move Zeroes
- Product of Array Except Self
- 3Sum
- Longest Substring Without Repeating Characters
- Minimum Window Substring
- Search in Rotated Sorted Array
- Reverse Linked List
- Add Two Numbers
- Binary Tree Level Order Traversal
- Lowest Common Ancestor of a Binary Tree
- Subsets
- Permutations
- Number of Islands
- Course Schedule
- Valid Parentheses
- Decode String
- Climbing Stairs
- Word Break
- Kth Largest Element in an Array
- LRU Cache
- Merge Intervals
这批覆盖了最常见模板。
十六、下一步最合理的动作
如果你要,我下一步可以继续做这两件事之一:
- 把这份扩展题单也拆成
详细讲义版 - 直接给你做一个
刷题计划表(按周安排)