Amazon SDE Intern OA 2026 春招最新出現的 "Sum of Skills" 題在一畝三分地的命中率約 16%,屬於中高頻題。表面上是一道陣列求和題,實際考察前綴和優化 + 邊界條件處理的細節。本文給出三種解法路徑、Python 完整實作以及 OA 評分系統的隱藏要求。
題目描述
Amazon 招聘部門需要為一個專案組建團隊。給定一個長度為 n 的整數陣列 skills,表示每個候選員工的技能值。組建方式如下:
- 團隊是陣列中連續的 k 個員工(子陣列)
- 團隊的總技能值定義為子陣列元素之和
- 需要返回所有長度恰好為 k 的連續子陣列的技能值之和的列表,按照子陣列起始位置升序排列
輸入約束
1 ≤ n ≤ 10^51 ≤ k ≤ n-10^4 ≤ skills[i] ≤ 10^4
示例
輸入: 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 評分系統會在隱藏測試用例中:
- 用大資料(n = 10^5)測速度 → 排除暴力解法
- 用極端值(連續 10^4 的最大值)測資料溢位——Python 自動大整數,C++/Java 需要用 long long
- 用 k = n(整個陣列)測單結果輸出
- 用 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 答題策略
- 第一遍寫滑動視窗,節省時間留給第二題
- 變數命名要業務化:
team_size比k更受 OA 評分系統好評 - 加邊界測試用例:Amazon OA 的隱藏測試覆蓋很多邊角,主動寫 4-5 個 assert
- 不要在 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