HackerRank 平台又一場 Amazon OA,做的不少了,場場AC,十來分鐘搞定。兩道題方向很經典——一道批量模擬,一道線性掃描貪心。以下是純思路複盤,不含程式碼。

考試概況
| 項目 | 詳情 |
|---|---|
| 平台 | HackerRank |
| 題數 | 2 道 |
| 難度 | Medium |
| 職位 | Intern / New Grad SDE |
| 結果 | 全AC,約 10 分鐘 |
T1:循環購物模擬(Shopping with Price Doubling)

題目核心
有若干商品,初始各有一個價格。你有一定初始餘額,循環購買:
- 每次購買後,該商品價格翻倍
- 餘額不足以購買任何商品時停止
- 求總共購買了多少件商品
解題思路
暴力做法:一件一件模擬,每次找最便宜的買,複雜度 O(m·n),m 為總購買件數。價格指數級增長,實際 m 不大,但題目資料量大時仍可能超時。
正確思路:批量整除模擬
關鍵觀察:在同一「輪」裡,所有商品的價格是固定的(還沒翻倍),可以一次性算出這輪能買多少件。
具體流程:
- 計算當前所有可買商品(即價格 ≤ 餘額)的價格總和
total_price - 用餘額整除總價:
rounds = balance // total_price,這一輪能完整購買rounds輪 - 更新餘額:
balance -= rounds * total_price - 更新計數:
count += rounds * 可買商品數 - 每輪後,所有商品價格翻倍,剔除漲價後買不起的商品
- 重複,直到沒有可買商品或餘額不足
為什麼這樣更快?
每一輪至少有一種商品因價格翻倍而被剔除,所以最多執行 O(n log(balance)) 輪,遠小於逐件模擬。
複雜度分析
- 時間複雜度:O(n² log(balance / min_price)),每輪剔除至少一件商品
- 空間複雜度:O(n)
關鍵洞察
價格翻倍意味著每種商品能買的總次數是有限的(對數級別),整體計算量遠小於直覺。批量整除是把「逐步模擬」壓縮成「批量跳躍」的核心技巧。
T2:非遞減陣列最小增量總和
題目核心
給定一個陣列(題目場景中是功率/power 陣列),你可以選擇任意連續子陣列,對其所有元素加上同一個值。目標是讓整個陣列變成非遞減序列,求所需的最小增量總和。
解題思路
乍看像 DP,其實有一個非常優雅的貪心結論:
掃描陣列,對所有相鄰的「降序對」,累加其差值。
即:遍歷陣列,凡是遇到 power[i] > power[i+1] 的位置,把 power[i] - power[i+1] 加入答案。
為什麼這是最優解?
每當出現下降,後面的元素必須被「抬高」才能滿足非遞減。最省增量的策略是:把後面的元素恰好抬到前面的高度,不多不少。連續操作可以合併,但最終每一個降序差都必須被補償,總增量恰好等於所有降序差的累加和。
複雜度分析
- 時間複雜度:O(n),一次線性掃描
- 空間複雜度:O(1)
關鍵洞察
不需要真正模擬「選子陣列加值」的過程。答案就是所有相鄰降序差的總和——這個結論來自於貪心的局部最優等於全局最優:每個降都必須被補,每個升不需要動。
兩題核心思路對比
| 題目 | 核心技巧 | 時間複雜度 | 空間複雜度 |
|---|---|---|---|
| T1 循環購物 | 批量整除模擬 + 剔除漲價商品 | O(n² log B) | O(n) |
| T2 非遞減增量 | 線性掃描累加降序差 | O(n) | O(1) |
常見思維誤區
| 題目 | 誤區 | 正確方向 |
|---|---|---|
| T1 | 逐件模擬,每次找最便宜的買 | 批量整除,一次處理多輪 |
| T1 | 忽略漲價後的剔除步驟 | 每輪後必須剔除買不起的商品 |
| T2 | 用 DP 枚舉子陣列操作 | 貪心:答案就是所有降序差之和 |
| T2 | 以為需要模擬「加值」操作 | 一次線性掃描,O(n) 直接得出答案 |
Amazon HackerRank OA 應試策略
Amazon OA 特點
- 平台:HackerRank
- 題目風格:模擬、貪心、陣列操作,考察快速建模能力
- 核心考點:能否識別「暴力正確但超時」並快速找到優化點
- 資料規模通常較大,O(n²) 注意是否會超時
臨場策略
- T1 類循環模擬:看到「每次操作後狀態變化」,先想能否批量跳躍而不是逐步模擬
- T2 類陣列調整:看到「最小操作使陣列滿足性質」,先試貪心,從局部最優推全局最優
- 先在草稿紙上過一遍小例子,確認邏輯再寫程式碼
- HackerRank 測試案例邊界較嚴,注意
balance = 0、單元素陣列、已是非遞減等邊界 - 寫完跑範例再提交
相關 LeetCode 練習
| 題號 | 題目 | 對應 Amazon OA 考點 |
|---|---|---|
| 1648 | Sell Diminishing-Valued Colored Balls | T1 批量模擬思維 |
| 2141 | Maximum Running Time of N Computers | T1 整除跳躍 |
| 665 | Non-decreasing Array | T2 非遞減判斷 |
| 1827 | Minimum Operations to Make Array Increasing | T2 最小增量 |
🚀 需要 Amazon OA 輔助?
oavoservice 專注北美大廠 OA/VO 全程輔助,Amazon OA 是我們的核心服務場景,HackerRank 和 CodeSignal 高頻題庫覆蓋率極高。
立即加 WeChat:Coding0201
獲取:
- ✅ Amazon OA 即時輔助(螢幕共享 + 即時打字提示)
- ✅ HackerRank / CodeSignal 真實題庫(覆蓋 80%+ 高頻題)
- ✅ 一對一模擬 OA + 詳細回饋
- ✅ VO 面試輔助(演算法 + 系統設計)
📱 WeChat:Coding0201 | 💬 Telegram:@OAVOProxy | 📧 [email protected]