寻找所需线性模式时要提出的问题

发布: (2026年1月4日 GMT+8 23:02)
5 min read
原文: Dev.to

Source: Dev.to

模式选择速查表

下面是一张 模式选择速查表
阅读题目时,对每个模式自行提问下面列出的问题。
如果你的答案是 YES,则该模式很可能是正确的思路。

1. Sliding Window(固定大小)

提问这些问题:

  • 题目是否在询问长度恰为 ksubarrays/substrings
  • 我是否需要为 每个大小为 k 的窗口 计算某些值(sum、max、count)?
  • 暴力解的时间复杂度是 O(n·k),而我需要 O(n)

触发词: “window of size k”, “consecutive k elements”, “substring length k”

2. Sliding Window(可变大小)

提问这些问题:

  • 窗口大小 不是固定的,而是受某个条件约束?
  • 我是否在寻找满足条件的 最小 / 最大 subarray
  • 能否 向右扩展向左收缩

触发词: “at most k”, “at least k”, “minimum window”, “longest substring”

3. Two Pointers(同向)

提问这些问题:

  • 我是否用两个索引 左 → 右 遍历数组?
  • 是否有一个指针在追赶另一个指针?
  • 我是否在维护数组内部的 range

触发词: “subarray”, “range”, “continuous segment”

4. Two Pointers(相向)

提问这些问题:

  • 数组是否 已排序
  • 我是否在寻找满足条件的 pair
  • 能否根据比较结果执行 left++ 或 right—

触发词: “pair sum”, “target”, “sorted array”

5. Fast & Slow Pointers(环检测)

提问这些问题:

  • 是否存在 linked list 或指针结构
  • 是否可能出现 cycle / loop
  • 能否让一个指针的移动速度是另一个的

触发词: “cycle”, “loop”, “circular”, “duplicate via index jump”

6. Prefix Sum

提问这些问题:

  • 我是否需要 频繁求区间和
  • 题目是否涉及 subarray sum equals k
  • 累计的前缀和是否能帮助解题?

触发词: “range sum”, “subarray sum”, “sum between i and j”

7. Difference Array

提问这些问题:

  • 是否有 多次区间更新
  • 我是否被要求对区间进行 增量/减量 操作?
  • 最终值重要,中间过程不重要

触发词: “range update”, “apply operations”, “add x from l to r”

8. Hash Map Frequency Counting

提问这些问题:

  • 我是否在统计 元素/字符的频率
  • 是否需要 常数时间查找
  • 顺序是否不如 计数 重要?

触发词: “frequency”, “count occurrences”, “anagram”

9. In‑place Modification

提问这些问题:

  • 题目是否要求 不使用额外空间
  • 能否直接修改原数组?
  • 输出是否期望 在同一数组内部

触发词: “in‑place”, “O(1) space”, “modify input”

10. Sorting‑based Pattern

提问这些问题:

  • 排序后是否能大幅简化逻辑?
  • 我是否在匹配 pairinterval
  • 改变顺序是否不影响正确性?

触发词: “after sorting”, “arrange”, “reorder”

11. Cyclic Sort

提问这些问题:

  • 数字是否在范围 1…n 之内?
  • 每个数字是否应该位于 特定索引
  • 我是否在寻找 缺失 / 重复 元素?

触发词: “missing number”, “duplicate”, “1 to n”

12. Kadane’s Algorithm(最大子数组)

提问这些问题:

  • 是否要求 maximum sum subarray
  • 负数和是否会导致问题?
  • 当累计和 n/2 次时是否可以重置?
  • 是否可以假设 majority 存在?
  • 是否需要 O(1) space

触发词: “majority element”, “more than half”

20. Reservoir Sampling

提问这些问题:

  • 数据是否 流式 / 无限
  • 是否事先不知道 n 的大小?
  • 是否需要 均匀随机抽样

触发词: “stream”, “random sample”, “unknown size”

Back to Blog

相关文章

阅读更多 »