Amazon SDE OA 算法拆解:从题面描述到可验证模型
围绕问题建模、基础解法、优化依据和反例验证,建立能迁移到新题的解题方法。

从背题转向识别结构
这篇文章侧重推导方法,与限时训练篇形成互补。它是原创算法训练说明,不承诺某种题型一定出现,也不将掌握某道题等同于获得面试机会。
遇到长题面时,先去掉故事背景,用一句话描述输入与目标。例如“把包裹安排到若干天内”可以进一步问:能否改变顺序、每天是否连续取货、目标是最少天数还是最小容量?这些条件决定算法,而不是故事中的公司或商品名称。
自拟问题:按顺序分批处理任务
给定一组正整数任务权重,保持顺序,在至多 days 批内处理完。每批总权重不能超过容量,求所需的最小容量。这里假设一个任务不可拆分,days 为正整数。
第一步:找一个可检查的判断问题
先不直接找最小值,而是问“容量为 cap 时能否完成”。依次累加权重,放不下就开启下一批。若某个任务单独就超过容量,当前容量必然不可行。
第二步:确认单调性
如果容量 cap 已经可行,更大的容量也可行,因为原来的分批方法仍然满足限制。因此答案空间可以二分。下界是最大的单个任务,上界是所有任务权重之和。
def minimum_capacity(weights, days):
if days <= 0 or any(w <= 0 for w in weights):
raise ValueError("days and weights must be positive")
if not weights:
return 0
def feasible(cap):
batches, load = 1, 0
for weight in weights:
if load + weight > cap:
batches += 1
load = 0
load += weight
return batches <= days
low, high = max(weights), sum(weights)
while low < high:
mid = (low + high) // 2
if feasible(mid):
high = mid
else:
low = mid + 1
return low
对于 [3, 2, 5, 4] 和 days=2,最小容量为 9。容量 8 时至少需要三批;容量 9 时可以分成 [3, 2] 与 [5, 4]。
第三步:解释复杂度与适用条件
每次判断扫描 n 个任务,二分区间不超过权重总和 S,时间复杂度可写为 O(n log(S+1)),额外空间为 O(1)。正权重、顺序不变与任务不可拆分,是当前建模的重要条件。
如果允许重新排序,问题结构会变化;如果权重可为负数,贪心判断与边界也不能直接照搬。训练中应主动指出这些前提,而不是只背诵二分模板。
第四步:用小规模反例验证
检查只有一批、批数大于任务数、所有权重相等和单个超大任务等情况。对少量任务,可以手动枚举切分位置,与代码答案对照。把正确性验证当作解题的一部分,才能更稳地处理陌生题面。
联系 VOPathway
希望把这些方法用于自己的准备,可以联系 VOPathway 说明目标岗位、准备阶段、预计时间与当前难点。
- 微信:Coding0201
- 邮箱:[email protected]
- Telegram:@OAVOProxy
- WhatsApp:+86 178 6396 8105
提供 OA辅助、VO辅助与 VO辅导,围绕考前练习、模拟面试和面后复盘制定训练计划。
本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。
预约一次训练复盘 ↗