PrepStack Free

首个 family 速查表

用 Recognition → invariant → skeleton 的顺序快速 recall;其余 family 保留为 Pro 路线预览。

Free

DFS 连通块与可达性

Recognition
题意出现 connected、reachable、component、group 或 region。 · 只问能否到达、分成几组或每组统计,不问最少步数。
Invariant
节点一旦标记 visited,就已被归入当前搜索代表的分量,之后不会属于另一分量。
Complexity
O(V+E) time · O(V) space
def components(graph):
    seen, groups = set(), []
    for start in graph:
        if start in seen:
            continue
        seen.add(start)
        stack, group = [start], []
        while stack:
            u = stack.pop()
            group.append(u)
            for v in graph[u]:
                if v not in seen:
                    seen.add(v)
                    stack.append(v)
        groups.append(group)
    return groups
Free

BFS 连通性遍历

Recognition
核心是遍历图或隐式状态图,而不是优化带权路径。 · 希望避免递归深度限制。
Invariant
队列中的节点已被发现并归属当前分量,但尚未展开;未访问节点尚未被证明从当前起点可达。
Complexity
O(V+E) time · O(V) space
from collections import deque

def bfs_groups(graph):
    seen, label = set(), {}
    group_id = 0
    for start in graph:
        if start in seen:
            continue
        seen.add(start)
        q = deque([start])
        while q:
            u = q.popleft()
            label[u] = group_id
            for v in graph[u]:
                if v not in seen:
                    seen.add(v)
                    q.append(v)
        group_id += 1
    return group_id, label
Free

网格 Flood Fill

Recognition
输入是 grid、image 或 board,移动到相邻格。 · 题意出现岛屿、区域、颜色、洞或边界。
Invariant
frontier 中每个坐标都已通过边界和谓词检查并被标记;弹出后只需扩展合法邻居。
Complexity
O(RC) time · O(RC) space
from collections import deque

def flood(grid, sr, sc, target, replacement):
    if not grid or not grid[0]:
        return 0
    rows, cols = len(grid), len(grid[0])
    if not (0 <= sr < rows and 0 <= sc < cols):
        return 0
    if target == replacement or grid[sr][sc] != target:
        return 0
    q = deque([(sr, sc)])
    grid[sr][sc] = replacement
    area = 0
    while q:
        r, c = q.popleft()
        area += 1
        for dr, dc in ((1, 0), (-1, 0), (0, 1), (0, -1)):
            nr, nc = r + dr, c + dc
            if 0 <= nr < rows and 0 <= nc < cols:
                if grid[nr][nc] == target:
                    grid[nr][nc] = replacement
                    q.append((nr, nc))
    return area
Free

拓扑排序 / 入度消除

Recognition
出现 prerequisite、dependency、build order。 · 要求满足所有先后约束的排列。
Invariant
frontier 中节点在当前剩余图中入度为零;输出 u 后只有 u 的直接后继入度减少。
Complexity
O(V+E) time · O(V+E) space
from collections import deque

def topo_order(nodes, edges):
    graph = {u: [] for u in nodes}
    indeg = {u: 0 for u in nodes}
    for u, v in edges:
        graph[u].append(v)
        indeg[v] += 1
    q = deque(u for u in nodes if indeg[u] == 0)
    order = []
    while q:
        u = q.popleft()
        order.append(u)
        for v in graph[u]:
            indeg[v] -= 1
            if indeg[v] == 0:
                q.append(v)
    return order if len(order) == len(nodes) else None

接下来的 families

Pro only

有序前沿与路径

Only available for Pro members

Pro only

二分与单调答案

Only available for Pro members

Pro only

双指针与滑动窗口

Only available for Pro members

Pro only

前缀、差分与哈希状态

Only available for Pro members

Pro only

栈、单调栈与单调队列

Only available for Pro members

Pro only

堆、选择与流

Only available for Pro members

Pro only

贪心与调度

Only available for Pro members

Pro only

分治与归并计数

Only available for Pro members

Pro only

动态规划

Only available for Pro members

Pro only

回溯与约束搜索

Only available for Pro members

Pro only

树、BST 与 Trie

Only available for Pro members

Pro only

并查集、MST 与离线激活

Only available for Pro members

Pro only

区间查询数据结构

Only available for Pro members

Pro only

字符串匹配、哈希与回文

Only available for Pro members

Pro only

数学、数论与组合

Only available for Pro members

Pro only

位运算与位掩码状态

Only available for Pro members

Pro only

几何、扫描线、模拟与解析

Only available for Pro members