带学员打完一场最新 Amazon Online Assessment ,想和大家分享一下经验。这次 OA 整体难度适中,题目设计很贴合亚马逊的业务场景,考察的是组合数学和贪心算法的应用。希望这篇分享能帮到正在准备的同学们!

时间线与考试形式
| 项目 | 详情 |
|---|---|
| 考试时长 | 105 分钟 |
| 题目数量 | 2 道编程题 |
| 考试平台 | HackerRank |
| 语言支持 | 主流编程语言(我使用 Python) |
重要提示:
- 题目有隐藏测试用例,不要只通过样例就提交
- 建议先通读两道题,选择有把握的先做
- 时间分配:第一题建议 50-60 分钟,第二题 30-40 分钟,留 10-15 分钟检查
题目 1:仓库机器人配置计数
题目描述
在亚马逊仓库中,有 n 个机器人,每个机器人可以是运行(Operating)或待机(Standby)状态。每个机器人 i 有一个协调阈值 coordinationThreshold[i]。
故障条件(满足任一即故障):
- 机器人
i正在运行,但其他运行中的机器人数量 <coordinationThreshold[i] - 机器人
i处于待机,但运行中的机器人总数 ≥coordinationThreshold[i]
目标:计算有多少种配置方案,使得没有任何机器人故障。
题目 1 思路
核心是:设运行的机器人总数为 k,我们可以通过枚举 k 的可能取值来计算方案数:
- 对于一个固定的
k,筛选出所有必须运行和必须待机的机器人:- 机器人
i必须运行:coordinationThreshold[i] ≤ k-1 - 机器人
i必须待机:coordinationThreshold[i] > k - 机器人
i可选:k-1 < coordinationThreshold[i] ≤ k
- 机器人
- 若可选机器人数量为
m,则当且仅当「必须运行的机器人数量 ≤ k ≤ 必须运行 + 可选机器人数量」时,有C(m, k - 必须运行数量)种方案 - 遍历所有可能的
k(0 ≤ k ≤ n),累加所有有效方案数
参考代码
from math import comb
def countValidConfigurations(n, coordinationThreshold):
total_configs = 0
# 枚举运行机器人总数 k
for k in range(n + 1):
must_operate = 0 # 必须运行
must_standby = 0 # 必须待机
flexible = 0 # 可选
for i in range(n):
threshold = coordinationThreshold[i]
# 如果运行,需要至少 threshold 个其他机器人运行
# 即总运行数 k 时,其他运行数 = k - 1
if threshold <= k - 1:
# 阈值 <= k-1,运行不会故障
if threshold > k:
# 但待机也会故障(因为运行总数 k >= threshold)
must_operate += 1
else:
# threshold <= k,运行和待机都可以
flexible += 1
else:
# threshold > k-1,运行会故障
if threshold > k:
# 待机不会故障
must_standby += 1
else:
# k-1 < threshold <= k,运行故障但待机也故障
# 这种情况无解,跳过这个 k
must_standby = float('inf')
break
# 检查是否可行
if must_operate <= k <= must_operate + flexible:
# 从 flexible 个机器人中选 (k - must_operate) 个运行
configs = comb(flexible, k - must_operate)
total_configs += configs
return total_configs
n = 8
coordinationThreshold = [6, 0, 3, 3, 6, 7, 2, 7]
print(countValidConfigurations(n, coordinationThreshold)) # 输出: 3
题目 2:服务器算力调整
题目描述
AWS 有 n 台服务器,初始算力为 power[n]。需要通过调整让算力数组变成非递减排列。
调整规则:
- 可以选择任意连续子数组
[L, R],给这些服务器同时增加x点算力(x ≥ 0) - 可以执行多次操作
目标:找到最小的所有操作的 x 之和。
题目 2 思路
这是经典的「用区间加法让数组非递减,求最小增量和」问题,最优解法是差分 / 贪心:
- 从左到右遍历数组,若
power[i] < power[i-1],则power[i]需要增加delta = power[i-1] - power[i] - 为了让操作数最少,我们可以直接给
power[i]增加delta(等价于对[i, n-1]加delta) - 累加所有
delta就是答案(因为区间加法的效果等价于给单个元素加,不会影响后续的非递减判断)
参考代码
def findMinimumSum(power):
n = len(power)
total_increase = 0
for i in range(1, n):
if power[i] < power[i - 1]:
# 需要增加的量
delta = power[i - 1] - power[i]
total_increase += delta
# 更新当前值(相当于对 [i, n-1] 整体加 delta)
power[i] = power[i - 1]
return total_increase
# 测试样例
power = [3, 4, 1, 6, 2]
print(findMinimumSum(power)) # 输出: 7
# 过程演示:
# [3, 4, 1, 6, 2]
# i=1: 4 >= 3, 不变
# i=2: 1 < 4, 加 3 → [3, 4, 4, 6, 2], total += 3
# i=3: 6 >= 4, 不变
# i=4: 2 < 6, 加 4 → [3, 4, 4, 6, 6], total += 4
# 最终答案: 3 + 4 = 7
备考资源推荐
- LeetCode 类似题:
- 重点复习:
- 组合数学(排列组合、容斥原理)
- 贪心算法(区间问题、调度问题)
- 差分数组和前缀和
大厂笔试准备的一些额外建议
Amazon OA 看起来通常只有 2 道题,但真正做的时候压力其实很大——不仅有隐藏 test cases,还需要在有限时间内快速想到最优解。尤其是像 Amazon 这种高频使用 HackerRank / CodeSignal 平台的公司,很多同学卡的不是基础语法,而是:
- 题目理解速度慢
- edge case 容易遗漏
- debug 时间过长
- 明明思路对了,但最终没法通过全部 test cases
如果你正在准备 Amazon OA、VO,或者其他大厂技术面试,Programhelp 提供更完整的支持:
- OA real-time assistance
- HackerRank / CodeSignal support
- Mock interviews
- Technical interview guidance
- System design preparation
- Amazon Leadership Principles interview prep
我们整理了大量 Amazon 高频 OA 题库和 VO 面试经验,帮助很多同学更高效准备并拿到 offer。
如果你最近也在冲 Amazon、TikTok、Meta、Google 等大厂岗位,提前准备真的会轻松很多。