LOOP 06 / INTERVIEW LOOP / 4H
二分边界与依赖图:维护候选,而非背模板
一份已排序延迟列表需要回答阈值查询。你还会在追问里遇到一个有环依赖图,用来检查是否把“遍历完”与“任务都可执行”混为一谈。
完成单元 47 · 用固定分区验证主项目线程生命周期及其先备后安排本次训练。不绑定日历周。
先写自己的答案,再展开参考。这里按技能编写问题,不声称公司真题;自评与阅读都不会自动通过 G0。
先备与学习位置
TIME WITH OUTPUTS
240 分钟怎样用
闭卷恢复先备 · 15min
复述第16章半开区间;阅读第三追问给出的入度与移除边规则,自己给两条边计一次入度。说出队列空与全部节点已处理为什么不同。
留下:先不查章节,写三条判断和一个不确定点;再只补读相关章节的解释段。
澄清题目与手算 · 25min
读主问题,逐条写输入、输出、范围与失败行为。手算前两个公开用例,给自己的方案找一个反例。
留下:一份接口合同、逐步状态表和最小反例;不要先打开参考推演。
独立实现或设计 · 55min
不用 std::lower_bound,实现 first_at_least(a,target),返回有序非降 vector 中第一个不小于 target 的下标;没有则返回 a.size()。用半开候选区间 [lo,hi) 写二分并手推更新。然后对一个小依赖图做纸上环检测,见第三个追问。
留下:保存个人代码或设计稿。编码题保留编译命令;设计题为每个事件编号,不能只画没有状态的箭头。
边界与反证 · 25min
用题目的全部公开用例核对真实输出;另外创造一个与公开输入不同的边界。发现失败时缩小输入,再解释修复。
留下:实际结果、原始失败和修复原因各一份;设计题记录一个被拒绝的执行顺序。
按表现进入追问树 · 35min
从 n1 开始。每题先录下自己的回答,再展开标准;按满足或未满足条件跳转。树最多走一轮,卡住时把剩余时间用于分支中的纠错,不循环加时。
留下:记录经过的节点、原话、缺失条件和修订;只会复述标准的节点仍标记待重做。
英文口述与打断 · 30min
用本页英文提纲录制两轮 90 秒回答;第二轮在 30 秒处自问追问,先回答追问再回到主线。每轮回听并改写两个含糊句。
留下:两轮录音或逐字稿;圈出输入、因果、边界和限制各一句。参考英文在录完第一轮后再读。
复盘与安排重做 · 25min
对照强弱答案,选择一个真正出错的环节:合同、状态、实现、验证或表达。填本页记录模板,并约定下一天的 30 分钟。
留下:一个有失败输入的错误记录和一个可观察修复标准;不要把全部问题归因为粗心。
次日无答案重做 · 30min
次日改为 first_greater:找第一个严格大于 target 的位置。输入 [1,2,2,4] 查 2、[] 查 2、[2] 查 2;不要打开原解答,解释比较符号为何改变。
留下:这是本周 240 分钟中的最后 30 分钟,不另加预算。先关闭解答,用 20 分钟独立做,再用 10 分钟核验并记录是否仍需复习。
包括次日重做,总计 240min。局部错因复盘属于本次练习,额外的计划复盘按实际需要另记。
SOLVE BEFORE READING THE ANSWER
先独立处理这个问题
不用 std::lower_bound,实现 first_at_least(a,target),返回有序非降 vector 中第一个不小于 target 的下标;没有则返回 a.size()。用半开候选区间 [lo,hi) 写二分并手推更新。然后对一个小依赖图做纸上环检测,见第三个追问。
输入与输出合同
- a 长度≤100、元素在 [-100,100] 且已排序;不负责自动修复未排序输入。
- 返回的 size() 是尾后位置,调用者必须先判断再读取。
- 每轮都必须严格缩小 hi-lo;重复值要求返回最左位置。
- 第三个追问是纸上拓扑规则练习,节点处已给入度、移除边和完成判据;本场不要求从未讲解的API实现图框架。
手算之后,对照公开用例
| 输入或情形 | 预期 | 为什么 |
|---|---|---|
| a=[1,2,2,4], target=2 | 1 | 首次相等位置。 |
| 同一 a,target=3 | 3 | 第一个≥3 的值是 4。 |
| 同一 a,target=5 | 4 | 返回尾后位置,不可解引用。 |
| a=[], target=0 | 0 | 空区间直接结束。 |
| a=[2,2,2], target=2 | 0 | 必须继续向左缩。 |
先保留自己的解法、状态轨迹与验证记录,再打开参考。允许用自然语言或伪代码补充解释;不能用参考输出代替真实运行。
保存独立尝试后,阅读解法与状态轨迹
解法依据
初始化 lo=0、hi=n,始终保留答案在闭合的边界范围 [lo,hi](答案可以为 n),而待读元素区间是 [lo,hi)。取 mid=lo+(hi-lo)/2。若 a[mid]<target,0..mid 都不合格,令 lo=mid+1;否则 mid 仍可能是第一个答案,令 hi=mid。lo==hi 时返回 lo。不直接读取 a[返回值]。
逐步推演
[1,2,2,4],target=2:lo=0,hi=4,mid=2,值 2 合格,hi=2;mid=1 合格,hi=1;mid=0 值 1 不合格,lo=1;结束返回 1。每一步的 hi-lo 从 4 到 2 到 1 到 0。
FOLLOW THE ANSWER, NOT A SCRIPT
从回答进入下一层追问
从 n1 开始。先录下回答,再展开判定;达到条件就走深入分支,未达到就按反馈缩小问题。一次最多走一轮,不靠反复查看同一答案累积“通过”。
NODE n1
相等时直接返回 mid,在 [2,2,2] 会得到什么错误?
NODE r1
把第一个追问缩到最小输入,重新逐步说明。
我已作答:查看判定与下一分支
需要解释清楚:初始 mid=1,返回 1 不是正确的最左下标 0。
NODE n2
把 lo=mid+1 写成 lo=mid,什么时候不前进?
NODE n3
纸上规则:节点入度是当前尚未移除的、指向它的边数。先把零入度节点加入队列;每移除一个节点,就删掉它的出边并减少目标入度,新变成零的节点才能入队。结束时处理数少于总节点数,说明仍有环。 有向边 A→B、B→C、C→B 表示前置依赖。队列先处理零入度 A,之后应返回完整顺序吗?
我已作答:查看判定与下一分支
需要解释清楚:不能。移除 A 后 B 仍有来自 C 的入度,B/C 形成环;处理数 1 小于总节点 3,应报告依赖环,而非猜出顺序。
达到
结论正确,并解释本节点给出的具体状态或反例。
保留关键推理:不能。移除 A 后 B 仍有来自 C 的入度,B/C 形成环;处理数 1 小于总节点 3,应报告依赖环,而非猜出顺序。
这一分支结束:对照并复盘 →答案强在哪里,弱在哪里
保存自己的回答后,打开对照
弱答案
“找到相等就 return,二分是 O(log n),所以肯定没问题。”
强答案
“题目要求第一个合格位置,找到相等也不能结束。我维护半开待读区间,相等时把 hi 移到 mid;这样保留左侧可能答案,同时确保区间变短。结果等于 size 时不能读取元素。”
强答案解释了候选集合和终止条件,复杂度才有依据。背出 O(log n) 不能抵消重复值和越界错误。
在自己的原回答里划出一个缺失的条件或错误推理,再重说一遍。完整句子背熟,不代表能处理新约束。
ANSWER, THEN HANDLE AN INTERRUPTION
英文口述与打断
Explain why finding an equal element is insufficient.
- Define the first satisfying index.
- Trace duplicate values.
- Explain termination and the past-the-end result.
“Can your loop get stuck on a one-element range?”
录完第一轮后,读英文示范
I need the first element that satisfies the threshold, not just any equal element. When the middle value qualifies, I keep it as a possible answer and move the upper boundary left. Every iteration reduces the candidate range. A return value equal to the size means no element qualifies, so the caller must not dereference it.- 前 15 秒说明输入、输出和一个关键约定。
- 至少用一个本题的数值解释因果,不只罗列英文术语。
- 明确一个边界或尚未验证的限制;不能把教学推演说成项目经验。
次日关掉解答,换一个问题
次日改为 first_greater:找第一个严格大于 target 的位置。输入 [1,2,2,4] 查 2、[] 查 2、[2] 查 2;不要打开原解答,解释比较符号为何改变。
独立重做后核对
依次返回 3、0、1。现在 a[mid]≤target 时都不合格,需要向右;不是仅把最终输出加 1。
- 关闭主问题答案并使用新输入独立完成。
- 给出结果与原因;失败时记录最小反例,不能只把完成标记改成通过。
重做的 30min 已计入本套4h;需要更多补课时记录实际用时,按缺口顺延。
记录实际回答与证据
# W06 算法 / 英文训练记录(仅个人练习,不是能力认证)
日期:
本次先备与尚不确定点:
主问题接口合同:
我最初的方案与状态表:
运行命令或设计事件编号:
失败输入 / 预期 / 实际:
修复与理由:
追问路径(节点 → 自己原话 → 缺口):
英文第一轮两处含糊句:
英文第二轮修订:
次日重做日期(30 分钟已含本周预算):
重做输入 / 实际结果 / 解释:
仍需补练:
本次练习的检查依据
二分全部边界正确且能证明区间缩小;纸上依赖图明确拒绝 B/C 环;英文区分任意命中与首次命中。
模板在你的个人笔记中填写。网页只提供空模板;不会把这次训练写成项目经验或学习验收结果。