Amazon OA 2026 面经分享:amazon oa leetcode 题目与解法总结

47Times read
No Comments

最近 Amazon OA 2026 已经开始陆续放量,时间点主要集中在 1 月下旬到 2 月初。从整体体验来看,今年的 OA 延续了 Amazon 一贯的出题风格:题目是新壳,但底层模型并不陌生,更看重的是你能不能快速把问题抽象成标准解法,而不是会不会某一道偏门技巧。这场 OA 一共两道题,我这场大概 15 分钟左右就全部 AC。趁着记忆还清晰,简单整理一下题目和思路,给后面准备 Amazon OA 的同学做个参考。

Q1:Longest Same-Speed Segment

给定一个选手速度数组,你最多可以删除 k 个选手,问删除之后,数组中能得到的「速度完全相同的最长连续段」长度是多少。注意这里的“连续段”是删除之后的结果,也就是说原数组中间可以夹着别的速度,但你可以选择删掉它们。

解题思路

这道题其实本质是“按值分组 + 在下标上滑窗”的经典模型。关键在于观察:我们关心的其实是“某一个固定速度 v 能做到多长”。对于同一个速度,只需要记录它在原数组中出现的所有下标位置。

具体做法是先用 hashmap,把每个速度对应的所有下标存起来。然后对每个速度的下标数组用滑动窗口,窗口表示“选择这些下标作为保留的同速选手”。在窗口内部,需要删除的其他速度数量可以用公式计算:窗口最后一个下标减去第一个下标再加一,减去窗口内元素个数。如果这个值不超过 k,就说明这个窗口可行。维护窗口长度的最大值,遍历所有速度后取最大值即可。

本质上,这题是在下标轴上,最多允许删 k 个“杂质”,求能拉出多长的同值连续区间。

Python 参考代码

from collections import defaultdict

def longestSameSpeedSegment(speeds, k):
    pos = defaultdict(list)
    for i, v in enumerate(speeds):
        pos[v].append(i)

    ans = 0
    for indices in pos.values():
        left = 0
        for right in range(len(indices)):
            # 需要删除的数量
            while indices[right] - indices[left] + 1 - (right - left + 1) > k:
                left += 1
            ans = max(ans, right - left + 1)
    return ans

时间复杂度是 O(n),这是非常典型的 Amazon OA 接受解法。

Q2:Special Nodes in Tree

给定一棵树,以及三个指定节点 x、y、z。对于树中的每一个节点,计算它到 x、y、z 的距离。如果这三个距离排序后能构成一个勾股三元组(a² + b² = c²),则称这个节点是特殊节点。问一共有多少个特殊节点。

解题思路

这题核心只有两个点:树上 BFS 就是最短路,每个节点只需要知道它到 x、y、z 的距离。

具体做法是分别从 x、y、z 出发,各做一次 BFS,得到三个数组:distX[i]、distY[i]、distZ[i],表示每个节点到三个指定节点的距离。然后对每个节点 i,取出这三个距离,排序后判断是否满足 a² + b² = c²,如果满足就计数。因为树的边权都是 1,所以 BFS 得到的就是最短路,整体复杂度 O(n),空间消耗也完全可控。
整体复杂度 O(n),空间也完全可控。

Python 参考代码

from collections import deque

def bfs(start, graph, n):
    dist = [-1] * n
    q = deque([start])
    dist[start] = 0

    while q:
        u = q.popleft()
        for v in graph[u]:
            if dist[v] == -1:
                dist[v] = dist[u] + 1
                q.append(v)
    return dist

def countSpecialNodes(n, edges, x, y, z):
    graph = [[] for _ in range(n)]
    for u, v in edges:
        graph[u].append(v)
        graph[v].append(u)

    dx = bfs(x, graph, n)
    dy = bfs(y, graph, n)
    dz = bfs(z, graph, n)

    cnt = 0
    for i in range(n):
        d = sorted([dx[i], dy[i], dz[i]])
        if d[0] >= 0 and d[0] * d[0] + d[1] * d[1] == d[2] * d[2]:
            cnt += 1
    return cnt

FAQ|Amazon OA 常见问题

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

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

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

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

没有 refer,只靠海投和 OA 还有机会吗?
答案是肯定的。Amazon 是少数几家 OA 权重极高的公司之一,只要简历基础不拉胯、OA 表现足够稳定,即使没有 refer,也完全有机会被直接捞进后续流程。在很多实际案例中,OA 的表现比 refer 更能决定你能走多远。

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

关于大厂 OA

如果你想在 OA 阶段少踩坑、提高通过率,尤其是面对时间有限的情况下还需要保证准确率,提前有一套专业实时助攻方案真的能省掉不少焦虑。Programhelp 支持远程、无痕、全程指导,让你在自己电脑上就能顺利完成 OA,适合准备 Amazon、Microsoft、Snowflake 等大厂的同学。

author avatar
Jory Wang Amazon资深软件开发工程师
Amazon 资深工程师,专注 基础设施核心系统研发,在系统可扩展性、可靠性及成本优化方面具备丰富实战经验。 目前聚焦 FAANG SDE 面试辅导,一年内助力 30+ 位候选人成功斩获 L5 / L6 Offer。
End of text
 0