← 返回博客列表 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