目录
正在加载目录...

Amazon intern 面经 | 26 Amazon OA 题目与解法总结 & OA准备

一、Amazon OA 整体体验

从整体体验来看,今年的 Amazon OA 延续了 Amazon 一贯的出题风格:题目是“新壳”,但底层模型并不陌生。更看重的是你能不能快速把问题抽象成标准解法,而不是会不会某一道偏门技巧。

Amazon OA 一共两道题,我大概30分钟左右全部 AC。趁着记忆还清晰,简单整理了一下题目和思路(具体内容见下文),给后面准备 Amazon OA 的同学做个参考。

我手边也有一份 OA 题库,包含题型分类和答题思路,可做系统练习。

Amazon OA真题领取

1️⃣ Amazon OA 一般多久出结果?没消息是不是就挂了?

这个问题几乎是每一轮都会被问到。实际体验是,Amazon 的 OA 结果推进节奏非常依赖批次headcount,有的候选人几天内就能收到下一步,有的则会间隔一到两周。如果你 OA 是全 AC,但短时间内没有任何动静,更多时候是流程优先级或者 HC 调整的问题,并不一定代表已经被淘汰。一个比较明显的信号是,真正被系统或 recruiter 标记为继续推进的候选人,流程通常不会被无限期搁置。

2️⃣ OA 一定要全 AC 才有后续吗?

说结论会比较现实一些。对于 Amazon 来说,尤其是 New Grad 或 Early Career 批次,全 AC 的通过概率明显更高。并不是说少过一两个 hidden case 就一定没机会,但从大量面经反馈来看,全 AC 基本相当于进入 Tech Screen 或 VO 的“入场券”。OA 在 Amazon 的筛选权重确实非常高。

3️⃣ 题目做出来了,但代码不够优雅,会有影响吗?

在 OA 阶段,Amazon 更关注的是代码是否稳定、是否正确,以及是否覆盖了边界情况。只要时间复杂度在合理范围内,不存在明显 bug,逻辑自洽,基本不会因为你没有写出最优雅或最短的代码而被卡。OA 更像是在验证你能不能在有限时间和压力下写出可用、可维护的代码,而不是炫技。

4️⃣ Amazon OA 常见题型应该怎么准备?

从最近几轮 OA 的题型来看,出现频率最高的还是滑动窗口、双指针、BFS 或 DFS、基于 HashMap 的建模,以及一些状态不复杂但需要抽象能力的 DP。相比无目的地刷题,更重要的是训练自己在读完题目的一两分钟内,能不能快速把问题归类到一个熟悉的模型中,这一点往往比题量更关键。

5️⃣ OA 最容易翻车的地方在哪里?

最常见的情况并不是算法不会,而是题意没有完全吃透就开始写,或者在复杂度和边界条件上掉链子。比如没有考虑空输入、极小规模的数据,或者在滑动窗口和 BFS 中不小心写出隐性超时。Amazon 的 OA 并不介意你多花一点时间想清楚,但非常容易因为“写得快但不稳”而直接被筛掉。

二、Amazon OA 真题

Q1

题目:一个初始为 p1×q1 的网格(所有格子为空),通过若干次操作将其扩展为 p2×q2 的网格。每次操作:选择”vertical”(在顶部加一行)或”horizontal”(在右侧加一列),然后在新增的格子中恰好占用其中一个,其余保持为空。最终网格为 p2×q2,底部左下角的原始格子始终为空。最终p2×q2网格中所有格子的填充状态共有多少种可能的配置?结果对 998244353 取模。

思路

  • 先把问题转成“新增了多少行 r 和多少列 c”,然后用动态规划按“逐行扩展”来统计方案数。
  • dp[new_c] 表示处理到当前阶段时,已经新增了 new_c 列的所有合法填法数量。
  • 每次新增一行时,有两类转移:要么在当前已有列里选位置放(乘当前列数),要么结合之前的状态和前缀累积 s 处理“新增列带来的贡献”。
  • 最后再把剩余列扩展的影响一次性乘上(用幂数组 p),把所有 new_c 的结果加起来并取模。

代码:

def findAllocationWays(p1, q1, p2, q2):
    MOD = 998244353
    r = p2 - p1
    c = q2 - q1
    dp = [0] * (c + 1)
    dp[0] = 1
    for new_r in range(r):
        base = (p1 + new_r) % MOD
        nxt = [0] * (c + 1)
        s = 0
        for new_c in range(c + 1):
            nxt[new_c] = (nxt[new_c] + dp[new_c] * ((q1 + new_c) % MOD)) % MOD
            if new_c >= 1:
                s = (base * (s + dp[new_c - 1])) % MOD
                nxt[new_c] = (nxt[new_c] + s) % MOD
        dp = nxt
    b = (p1 + r) % MOD
    p = [1] * (c + 1)
    for i in range(1, c + 1):
        p[i] = (p[i - 1] * b) % MOD
    ans = 0
    for new_c in range(c + 1):
        ans = (ans + dp[new_c] * p[c - new_c]) % MOD
    return ans

Q2

题目:有 n 个机器人,每个机器人 i 有一个阈值 coordinationThreshold[i],表示它正常工作所需的其他处于 Operating 状态的机器人数量。若机器人 i 处于 Operating 状态,但其他 Operating 机器人数量小于 threshold[i],则故障。若机器人 i 处于 Standby 状态,但 Operating 机器人总数大于等于 threshold[i],则故障。有多少种合法的 Operating/Standby 分配方案(任何机器人都不故障)?

思路:

  1. 假设最终有 k 个机器人是 Operating,那么所有阈值 <= k-1 的机器人必须都能进 Operating,否则凑不够 k 个。
  2. 如果某个机器人的阈值刚好是 k,它无论选 Operating 还是 Standby 都会出错,所以这种 k 必须排除。
  3. 所以我们统计每个阈值出现次数 freq,并用前缀和算出 cnt = 阈值 <= k-1 的机器人数量
  4. 当且仅当 cnt == kfreq[k] == 0,这个 k 是一个合法配置,答案加 1。

代码:

def getValidConfigurations(coordinationThreshold):
    n = len(coordinationThreshold)
    freq = [0] * (n + 1)
    for t in coordinationThreshold:
        freq[t] += 1

    ans = 0
    cnt = 0
    for k in range(n + 1):
        if k > 0:
            cnt += freq[k - 1]
        if cnt == k and freq[k] == 0:
            ans += 1
    return ans

三、Amazon OA 做题总结

Amazon oa 做题速度很重要 大部分Coding的面试题都不会特别的难,哪怕是遇到了Hard难度的题,只要尽量多的输出自己的思路也能让面试官觉得你不错。

OA以能做出来为主,如果能用一句code写出来,就不要写两句。不要为了showoff,而因小失大;及时反馈思路,拿一个20min的一题举例子,一般2min读题,3min讲思路,10分种coding,5分钟和面试官过代码,debug。但当你发现,你花了五分钟还没想出最优思路的时候,如果你继续思考哪怕你想出来了,也有可能没时间完成后面写码和测试的环节了,所以此时要快速的把已有的解法先写出来。

如果你也在准备 Amazon 或其他大厂的 OA/VO,可以直接联系 interviewAid 了解对应的面试辅助和陪跑支持。如果你想找我辅助面试,或者用 Amazon 面经 中的原题 mock,感受最真实的feedback,欢迎戳我。

正文完