← 返回部落格列表 Amazon 實習 OA 真題解析:倉庫最短路徑 BFS + 伺服器負載分配模擬
Amazon

Amazon 實習 OA 真題解析:倉庫最短路徑 BFS + 伺服器負載分配模擬

2026-06-07

最近很多同學在討論今年亞麻暑期實習 OA 的題目,大多數還是那幾道反覆出現的老題,變化不大。這裡整理了兩道遇到的新題,希望幫到準備 OA 的同學。

流程還是老樣子:在 HackerRank 上做題,開始時需要拍照身份認證,之後整個過程不需要再開攝影機或共享螢幕。Test case 有 hidden,按通過用例數計分。編程題之後是 Work Simulation。

Amazon 實習 OA 速查表

維度 詳情
平台 HackerRank
身份認證 開始時拍照,之後無需攝影機
題量 2 道編程題 + Work Simulation
時長 編程約 60-90 分鐘
評分 按通過的 hidden 用例數計分

題一:倉庫機器人最短路徑(BFS)

題目描述

模擬 Amazon 物流倉儲中心最典型的規劃問題。給定一個由 0 和 1 組成的二維網格:0 表示可通行道路,1 表示障礙物。給出機器人起點和目標包裹位置,返回從起點到目標的最短路徑長度;若到不了返回 -1。

解題思路

網格上的最短路徑(每步代價相同)首選 BFS:從起點逐層擴展,第一次到達目標時的層數就是最短距離。用佇列記錄 (列, 行, 距離),visited 防止重複入佇列。

Python 解法

from collections import deque

def shortest_path(grid, start, target):
    rows, cols = len(grid), len(grid[0])
    sr, sc = start
    tr, tc = target
    if grid[sr][sc] == 1 or grid[tr][tc] == 1:
        return -1
    queue = deque([(sr, sc, 0)])
    visited = {(sr, sc)}
    while queue:
        r, c, dist = queue.popleft()
        if (r, c) == (tr, tc):
            return dist
        for dr, dc in ((1, 0), (-1, 0), (0, 1), (0, -1)):
            nr, nc = r + dr, c + dc
            if 0 <= nr < rows and 0 <= nc < cols \
                    and grid[nr][nc] == 0 and (nr, nc) not in visited:
                visited.add((nr, nc))
                queue.append((nr, nc, dist + 1))
    return -1

為什麼不用 DFS:DFS 找到的不一定是最短路徑,還要回溯所有路徑才能確認最短;BFS 按層擴展,第一次到達即最短,複雜度更優。

時間複雜度:O(rows × cols) 空間複雜度:O(rows × cols)

題二:伺服器負載分配模擬(貪心 + 堆積)

題目描述

更偏向 Amazon Prime Video 背後的內容分發邏輯。給定 N 台伺服器的當前負載,系統一次新增 K 個請求,模擬分配過程:每次把新請求派給當前負載最低的伺服器,分配後更新其負載,再繼續下一輪。做完 M 次分配後,返回最終負載狀態。

解題思路

每次都要取「負載最低」,這是最小堆積的經典場景。把 (負載, 伺服器編號) 入堆,每次彈出最小、加上請求量、再壓回堆。

Python 解法

import heapq

def distribute_load(loads, requests):
    # loads: 初始負載列表; requests: 每次新增的請求量列表
    heap = [(load, i) for i, load in enumerate(loads)]
    heapq.heapify(heap)
    for req in requests:
        cur_load, idx = heapq.heappop(heap)     # 取負載最低
        heapq.heappush(heap, (cur_load + req, idx))
    result = [0] * len(loads)
    for load, idx in heap:
        result[idx] = load
    return result

為什麼用堆積而非每次掃描:每次線性掃描找最小是 O(N),總共 O(M·N);堆積把單次取最小降到 O(log N),總複雜度 O(M log N),在 N、M 較大時差距明顯——這正是 hidden case 卡 TLE 的地方。

時間複雜度:O((N + M) log N) 空間複雜度:O(N)

Work Simulation 應對

編程題之後的 Work Simulation 簡單得多,可以理解成選擇題版的情境判斷測驗(SJT),不限時,邏輯相對固定。答題時圍繞 Amazon Leadership Principles(Customer Obsession、Ownership、Bias for Action 等)選擇,基本能穩過。

備考策略

能力 重點 推薦 LeetCode
網格 BFS 最短路徑、層序擴展 1091, 994, 542
堆積 / 貪心 動態取極值 1167, 215, 1834
IO 範本 HackerRank stdin 讀入
複雜度意識 N 大時排除 O(M·N)

FAQ

Q1:Amazon 實習 OA 在哪個平台做?需要全程開攝影機嗎? 在 HackerRank 上做。開始時需要拍照做身份認證,之後整個過程不需要再開攝影機或共享螢幕。編程題結束後還有一個 Work Simulation。

Q2:Amazon 實習 OA 有幾道題?難度如何? 通常 2 道編程題 + 1 個 Work Simulation。編程題以 LeetCode 中等為主,常見網格 BFS、負載分配模擬這類貼業務場景的題,難點多在複雜度優化而非思路。

Q3:倉庫最短路徑題為什麼要用 BFS 而不是 DFS? 每步代價相同的網格最短路徑,BFS 按層擴展,第一次到達目標即最短,複雜度 O(列×行)。DFS 不保證最短,需回溯所有路徑,效率更差。

Q4:伺服器負載分配題怎麼避免 TLE? 用最小堆積動態取負載最低的伺服器,單次 O(log N),總 O(M log N)。若每次線性掃描找最小是 O(M·N),在大資料 hidden case 上會超時。

Q5:Work Simulation 怎麼準備? 它是不限時的情境判斷選擇題,圍繞 Amazon Leadership Principles 作答即可,優先體現 Customer Obsession 和 Ownership,邏輯固定,認真讀題基本不會出錯。


正在準備 Amazon 實習 OA?

如果你 HackerRank IO 還不熟、網格 BFS 或堆積優化反覆 TLE,或希望有人幫你做平台流程檢查與題型陪練,可以聊聊完整的 OA代面 / OA輔助 方案——從真題拆解到複雜度優化,全程支援。


聯絡方式

需要面試真題與客製備戰計畫?立刻聯絡微信 Coding0201獲取真題

Email: [email protected] Telegram: @OAVOProxy