← 返回博客列表 Amazon Intern OA 2026:技能值之和团队分配真题深度解析|SDE Intern
Amazon

Amazon Intern OA 2026:技能值之和团队分配真题深度解析|SDE Intern

2026-05-13

Amazon SDE Intern OA 2026 春招最新出现的 "Sum of Skills" 题在一亩三分地的命中率约 16%,属于中高频题。表面上是一道数组求和题,实际考察前缀和优化 + 边界条件处理的细节。本文给出三种解法路径、Python 完整实现以及 OA 评分系统的隐藏要求。

题目描述

Amazon 招聘部门需要为一个项目组建团队。给定一个长度为 n 的整数数组 skills,表示每个候选员工的技能值。组建方式如下:

输入约束

示例

输入: skills = [3, -1, 4, 1, 5, 9, 2, 6], k = 3
输出: [6, 4, 10, 15, 16, 17]

解释:
- [3, -1, 4]  = 6
- [-1, 4, 1]  = 4
- [4, 1, 5]   = 10
- [1, 5, 9]   = 15
- [5, 9, 2]   = 16
- [9, 2, 6]   = 17

三种解法对比

解法 时间复杂度 空间复杂度 实战推荐度
暴力求和 O(n × k) O(1)
前缀和 O(n) O(n) ⭐⭐⭐⭐
滑动窗口 O(n) O(1) ⭐⭐⭐⭐⭐

解法一:暴力(基线)

def team_skills_brute(skills, k):
    n = len(skills)
    result = []
    for start in range(n - k + 1):
        window_sum = sum(skills[start:start + k])
        result.append(window_sum)
    return result

时间复杂度:O(n × k),当 n=10^5 且 k=10^4 时会超时。

解法二:前缀和(推荐用于变体题)

预计算前缀和数组 prefix,则任意子数组 [i, j) 的和等于 prefix[j] - prefix[i]

def team_skills_prefix(skills, k):
    n = len(skills)
    prefix = [0] * (n + 1)
    for i in range(n):
        prefix[i + 1] = prefix[i] + skills[i]
    
    result = []
    for start in range(n - k + 1):
        result.append(prefix[start + k] - prefix[start])
    return result

时间复杂度:O(n);空间复杂度:O(n)。

前缀和的好处:如果题目变体要求任意区间长度的查询(不固定 k),前缀和是 O(1) 查询的唯一办法。

解法三:滑动窗口(OA 评分系统首选)

固定窗口大小 k,每次右移:减去最左边的元素,加上最右边的新元素。

def team_skills(skills, k):
    n = len(skills)
    if k > n:
        return []
    
    window_sum = sum(skills[:k])
    result = [window_sum]
    
    for i in range(k, n):
        window_sum += skills[i] - skills[i - k]
        result.append(window_sum)
    
    return result

时间复杂度:O(n);空间复杂度:O(1)(不计输出)。

为什么 OA 系统首选滑动窗口

Amazon 的 OA 评分系统会在隐藏测试用例中:

  1. 用大数据(n = 10^5)测速度 → 排除暴力解法
  2. 用极端值(连续 10^4 的最大值)测数据溢出——Python 自动大整数,C++/Java 需要用 long long
  3. 用 k = n(整个数组)测单结果输出
  4. 用 k = 1(每个元素自成一组)测最小窗口

滑动窗口在所有用例下都最稳。

完整解题框架

def get_skill_sums(skills, k):
    n = len(skills)
    
    if n == 0 or k == 0 or k > n:
        return []
    
    window_sum = sum(skills[:k])
    result = [window_sum]
    
    for i in range(k, n):
        window_sum += skills[i] - skills[i - k]
        result.append(window_sum)
    
    return result


def test():
    assert get_skill_sums([3, -1, 4, 1, 5, 9, 2, 6], 3) == [6, 4, 10, 15, 16, 17]
    assert get_skill_sums([1, 2, 3], 3) == [6]
    assert get_skill_sums([5], 1) == [5]
    assert get_skill_sums([], 1) == []
    assert get_skill_sums([1, 2, 3], 5) == []
    assert get_skill_sums([-1, -2, -3, -4], 2) == [-3, -5, -7]
    print("All tests passed.")

test()

题目变体(OA 高频出现)

变体一:返回最大团队技能值

def max_team_skill(skills, k):
    sums = get_skill_sums(skills, k)
    return max(sums) if sums else 0

变体二:返回最大技能值的起始索引

def max_team_start_index(skills, k):
    n = len(skills)
    if k > n:
        return -1
    
    window_sum = sum(skills[:k])
    best_sum = window_sum
    best_start = 0
    
    for i in range(k, n):
        window_sum += skills[i] - skills[i - k]
        if window_sum > best_sum:
            best_sum = window_sum
            best_start = i - k + 1
    
    return best_start

变体三:技能值之和 ≥ target 的团队数量

def count_teams_above_target(skills, k, target):
    n = len(skills)
    if k > n:
        return 0
    
    window_sum = sum(skills[:k])
    count = 1 if window_sum >= target else 0
    
    for i in range(k, n):
        window_sum += skills[i] - skills[i - k]
        if window_sum >= target:
            count += 1
    
    return count

OA 答题策略

  1. 第一遍写滑动窗口,节省时间留给第二题
  2. 变量命名要业务化team_sizek 更受 OA 评分系统好评
  3. 加边界测试用例:Amazon OA 的隐藏测试覆盖很多边角,主动写 4-5 个 assert
  4. 不要在 OA 中写注释解释算法,节省时间——评分系统不看注释

FAQ

Sum of Skills 在 Amazon OA 出现频率有多高?

2026 年 Q1-Q2 的 SDE Intern OA 中出现率约 16%(来自一亩三分地汇总),属于稳定的中高频题。与 Robot Coordination、Warehouse Restock 一起组成 Amazon Intern OA 的「三大金刚」。

这道题给的时间够吗?

Amazon Intern OA 通常是 70 分钟 2 题。Sum of Skills 作为第一题,应在 15-20 分钟内完成,留 50 分钟给更难的第二题(通常是 DP 或图论)。

OA 系统会卡 Python 时间吗?

不会显著卡 Python。Amazon OA 给 Python 的时间限制比 C++ 多 3-5 倍,n=10^5 的滑动窗口在 Python 中 100ms 内完成,安全。

这道题用 C++ 需要注意什么?

注意 sum 的累加可能溢出 int。n=10^5, max_value=10^4 的极端情况下,sum 可能达到 10^9,刚好不溢出 int,但建议直接用 long long 防御性编程。

滑动窗口和前缀和如何选?

固定窗口大小用滑动窗口(空间 O(1)),变长查询/多次查询用前缀和(O(1) 单次查询,预处理 O(n))。OA 评分系统对两者都接受,但滑动窗口写得更快。


正在准备 Amazon Intern OA?

Amazon SDE Intern OA 的题型库相对固定,但每年都有新变体。oavoservice 持续维护 Amazon Intern OA 真题库,包含 Sum of Skills、Robot Coordination、Warehouse Restock 等 30+ 高频题的完整解题方案与变体训练。

立即添加微信:Coding0201获取 Amazon Intern OA 真题库

#Amazon Intern #OA #SDE Intern #滑动窗口 #算法 #北美求职


联系方式

Email: [email protected]
Telegram: @OAVOProxy