
最近 Amazon Intern OA 又很常出現這種組合題:題面很長、程式碼量不算大,但只要前幾分鐘對題意理解偏掉,後面整題就會一路越寫越亂。
這兩題就是很典型的例子。它們真正考的都不是語法或模板,而是你能不能先把敘述翻成一個乾淨、可判定、可貪心的模型。
很多同學做完之後的共同感受其實很一致:
題目本身不一定最難,真正可怕的是一開始就把系統狀態理解錯。
這篇不放程式碼,只講 OA 現場最重要的部分:到底應該怎麼想。
Amazon OA 這組題真正考什麼
| 題目 | 核心能力 |
|---|---|
| 題目 3 | 全域狀態計數、閾值建模、頻率統計 |
| 題目 4 | 前綴和、容量限制、檢查點條件、貪心補貨 |
| 共通點 | 先建模,再實作 |
這很符合 Amazon OA 的出題風格:
- 題面像業務規則
- 真正的解法藏在不等式裡
- 抽象沒做對,後面寫得再快也很難救回來
✅ 題目 3:機器人協調閾值下,有多少種穩定配置?
先把題意重新翻譯
每台機器人只有兩種狀態:
OperatingStandby
每台機器人 i 都有一個 coordinationThreshold[i]。
假設系統裡總共有 O 台機器人在運行,那麼:
- 若機器人
i正在運行,它要求「其他正在運行的機器人數量」至少達到自己的閾值 - 若機器人
i處於待機,它要求「當前運行機器人總數」必須嚴格小於自己的閾值
題目要你算的是:總共有多少種不會讓任何機器人故障的狀態分配。
這題第一步絕對不是枚舉所有開關狀態
很多人看到每台機器人只有兩種狀態,就會自然想到子集枚舉。但這題真正有價值的變數不是誰開誰關,而是:
目前總共有多少台機器人在運行
把這個數字記作 O。
一旦 O 固定,每台機器人的命運其實幾乎就被決定了:
- 若它的閾值小於
O,它必須運行 - 若它的閾值大於
O,它必須待機 - 若它的閾值剛好等於
O,那這個O直接不可能合法
這就是整題最核心的等價轉化。
為什麼「閾值等於 O」一定無解
這個觀察最容易漏,但也是整題最關鍵的地方。
若 coordinationThreshold[i] = O:
- 讓它運行時,它能看到的其他運行機器人只有
O - 1台,不足 - 讓它待機時,它又要求總運行數必須嚴格小於
O
也就是說,放在兩邊都衝突。
所以只要有任何機器人的閾值剛好等於 O,這個運行總數就不可能對應穩定配置。
合法配置的必要且充分條件
對固定的 O,合法其實只需要滿足兩件事:
- 沒有任何機器人的閾值等於
O - 閾值小於
O的機器人數量,剛好等於O
第二點很重要。因為所有閾值小於 O 的機器人都被強制要求運行,而系統總運行數又恰好是 O,所以這個數量一定要完全對上。
換句話說,這題不是在問「哪些機器人可以開」,而是在問「哪些 O 本身是自洽的」。
為什麼這題可以快速做完
只要先統計每個閾值出現了幾次,然後從 O = 0 掃到 n,你就能持續維護兩個資訊:
- 閾值等於
O的機器人有沒有出現 - 閾值小於
O的機器人目前累積有多少
於是每個 O 都能在常數時間內判斷是否合法。
最後答案就是所有合法 O 的個數。因為對每個合法 O 來說,狀態分配其實是唯一的:
- 小於
O的一定要開 - 大於
O的一定要關 - 等於
O的一旦存在就非法
這題最常見的失分點
- 把它當成一般子集計數題
- 沒發現「閾值等於
O」時兩邊都不合法 - 把條件寫成「小於等於
O的個數等於O」 - 以為固定
O後,還需要再選一遍哪些機器人開機
Amazon 在這題真正想看什麼
這題本質不是考暴力,也不是考高深技巧,而是看你能不能:
- 找到正確的全域變數
- 把每台機器人的局部規則壓縮成一個整體判定條件
- 把狀態分配問題改寫成計數問題
只要這一步想通,整題就會乾淨很多。
✅ 題目 4:檢查日不能為負、庫存又不能爆容量,最少要補多少貨?
先把目標看清楚
倉庫一開始的庫存是 0。每天晚上會發生一件事:
tasks[i] > 0:入庫tasks[i] < 0:出庫tasks[i] = 0:檢查日
每天早上,經理都可以做緊急補貨,而且補多少都行。
但題目的優化目標不是最少補貨次數,而是:
- 每個檢查日庫存都不能為負
- 任意一天庫存都不能超過
max_products - 在滿足以上條件下,緊急補貨的總數量要最小
如果這一點讀錯,後面的貪心方向就會整個寫反。
為什麼不能只在當下缺多少補多少
很多人第一直覺是:
檢查日如果庫存小於 0,那就補到剛好 0 就好。
這樣想只看到了當下,沒看到未來。因為你還得同時考慮:
- 後面會不會再有一大波入庫
- 今天補太多,未來會不會爆容量
- 今天補太少,後面是不是又要再補一次
所以這題不能只盯著眼前檢查點,而要同時看未來這段庫存路徑還有多少可用空間。
正確視角:把補貨看成把整條庫存曲線往上抬
如果完全不補貨,tasks 會形成一條原始庫存軌跡。
每次補貨,其實都是把後面的庫存曲線整體往上抬一截。
但這個上抬幅度不能隨便決定,因為你要一直同時滿足:
- 檢查日時,抬高後的庫存不能低於
0 - 任意一天,抬高後的庫存不能超過
max_products
所以這題的關鍵不是臨時修補,而是控制未來整段路徑的上移幅度。
貪心的關鍵:一旦必須補,就補到目前安全上限
原因在於,題目要求的是最少補貨總量,而補貨一旦真的必須發生,你就需要讓這次補貨在未來盡可能持久地發揮效果。
因此當某個檢查日發現目前庫存已經為負時,正確做法不是保守地只補到剛好合法,而是:
- 先算出當前至少還差多少,這次檢查才會合法
- 再算出從現在往後,最多還能補多少而不會讓未來某天超過容量上限
如果連當前缺口都補不滿,直接無解。
如果補得進去,那就應該在安全範圍內盡量補滿,讓這次補貨覆蓋更長的未來區間。
為什麼前綴和與後續空間資訊很重要
你要知道「現在最多還能補多少」,本質上就是要知道未來某一天距離 max_products 最近的位置在哪裡。
因此這題常見的正解思路都會先建立:
- 前綴和,用來得到原始庫存軌跡
- 後綴最大值或等價的未來剩餘空間資訊,用來判斷往後還能整體上抬多少
這樣在每個檢查日,你就能同時知道:
- 至少要補多少,這次檢查才不會掛
- 最多能補多少,未來才不會爆倉
若前者大於後者,直接代表無解。
這題比較穩的操作節奏
遍歷每天時,維護一個“已經累積補進去的總量”。
- 普通入庫日、出庫日,照原始軌跡更新
- 碰到檢查日,若當前調整後庫存已經非負,就不用動
- 若檢查日時庫存是負的,這次補貨就是必須的
- 補貨量取目前允許的最大安全值,但前提是必須至少覆蓋這次缺口
這樣的好處是:
- 每次補貨都不浪費
- 每次補貨都盡量延長有效期
- 最後總補貨量也能保持在最優方向上
這題最容易翻車的地方
- 把題目誤讀成最少補貨次數
- 只看這次檢查缺口,不看未來容量空間
- 忘記容量限制作用在每一天,不只是檢查日
- 認為普通日庫存一旦為負也算失敗
- 貪心得太保守,後面反覆補貨
這題本質上在考什麼
這就是很典型的 Amazon 業務建模題:
- 有時間維度
- 有硬限制
- 有明確優化目標
- 可以用貪心,但前提是你先理解補貨在幾何上代表什麼
真正拉開差距的,從來不是你會不會寫前綴和,而是你能不能先看出“補貨 = 把未來庫存曲線往上抬”。
🎯 這兩題放在一起,Amazon 想篩掉哪種人?
表面上一題像計數,一題像倉庫模擬,風格完全不同;但實際上它們在篩的都是同一種能力:
- 能不能先找出全域狀態
- 能不能從規則中抽出必要且充分條件
- 能不能在動手前就知道自己到底在判什麼、貪什麼
不會建模的人,會覺得題面又長又繞。
會建模的人,反而會發現這兩題都不是重程式碼題,而是標準的 Amazon OA 邏輯壓縮題。
📌 最後總結
這組題最值得記住的不是某個模板,而是兩個很典型的思維切換:
- 題目 3:不要枚舉每台機器人的狀態,要枚舉運行總數
O - 題目 4:不要把補貨看成局部修補,要把它看成對未來庫存軌跡的整體上抬
如果你最近正在準備 Amazon Intern OA,這兩種抽象方式都非常值得反覆練熟。很多時候,真正決定你過不過的,不是寫程式的速度,而是前幾分鐘有沒有把題看對。
🚀 oavoservice:你的 Amazon OA 滿分通關保障
面對 Amazon 這種題面長、建模要求高、細節條件又特別容易判錯的考核,你需要的不只是一份答案,而是一個專業的技術團隊支持。
我們提供:
✅ HackerRank 滿分代寫 — 高頻題庫持續覆蓋
✅ 程式碼符合工業級規範 — 邏輯清楚,邊界完整
✅ 即時場外助攻 — 無痕輔助,不干擾正常操作
✅ 7x24 小時在線 — 隨時待命
不要讓一道理解慢半拍的 OA 題,卡住你通往 Amazon 的路。
We consistently provide professional online assessment services for major tech companies like Amazon, Adobe, Google, and TikTok, guaranteeing perfect scores. Feel free to contact us if you're interested.
👉 立即添加微信:Coding0201
鎖定你的 Amazon 面試機會!
Telegram: @OAVOProxy
Gmail: [email protected]