最近 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 等大厂的同学。