帶學員打完一場最新 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:
# 但待機也會故障(因為執行總數 k >= threshold)
must_operate += 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] = 3, 不變
# i=2: 1 = 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 等大廠崗位,提前準備真的會輕鬆很多。