跳转到内容

枚举与状态维护(Java)

约 2 分钟原样导入

算法交互课 · JAVA · 从具体案例出发

先决定枚举谁,再决定记住什么。

用同一个数组,把问题、手推过程和 Java 代码连起来。每一步都可以暂停、回退,也可以换一个输入重新验证。

你需要会读数组、基础循环和 Java 方法。不熟悉下标、历史区、键、频次、查询与更新也没关系,首课会逐一解释。

学习时试着回答三个问题:我在枚举谁?我需要查询什么?我消掉了哪一层重复工作?这里沿用材料中的“枚举状态表”作为问题模型的称呼;它不是一种新容器,具体可以使用 HashMap、频次数组或前后缀数组。

  1. 读懂问题与样例,确认统计的是哪些下标对。
  2. 手动走一遍暴力检查,再看如何用左侧频次替代重复扫描。
  3. 在错误实验中观察自己为什么会被算进去。
  4. 对照 Java,换一个样例独立推演,再做三道自测。

01 · 本期完整交互课

好数对:枚举右,维护左 →

两种正确解法 · 自定义输入 · 错误顺序实验 · Java 联动 · 三道自测

方向 将要解决的问题 状态
条件重排与贡献法 两数之和的键匹配、坏数对的总数减好数;区分输出下标与输出数量 规划中
枚举中间,看两边 山形三元组与左右最优信息 规划中
枚举结构轴 对角线分组与排序 规划中
枚举答案结构 两个不重叠区间的最优合并 规划中
单调推进与窗口维护 双指针、窗口加入和移除 规划中

这些方向暂未提供课程,不计入本期交付。原有算法文章仍保留在侧栏“算法思想与排序”中。

专题依据《枚举与观察力-能力拆解分析报告》《枚举与观察力-能力拆解分析报告-白话版算法学习文档》和《枚举与观察力-数据结构基础模板文档(Java)》整理。具体使用章节、教学修订见首课末尾。