← 返回部落格列表 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