← 返回博客列表
Amazon

Amazon OA 兩題全AC複盤:虛擬機庫存調度 + 字串前綴等分

2026-03-20

又一場 Amazon OA,兩道題都是從高頻題庫裡抽的,考察方向非常典型——一道模擬貪心,一道字串雜湊。以下是完整思路複盤,不含程式碼,專注於拆題邏輯和解題路徑。

Amazon OA 虛擬機庫存調度題目截圖


考試概況

項目 詳情
平台 CodeSignal
題數 2 道
難度 Medium
職位 Intern / New Grad SDE
結果 全AC

T1:虛擬機庫存租賃調度

Amazon OA T1 虛擬機庫存題目

題目核心

n 類虛擬機,每類有一定庫存數量。m 個客戶依次來租賃,每個客戶的行為是固定的:

求所有 m 次租賃的總租金

解題思路

關鍵在於每次操作後需要快速知道兩件事:最大庫存是多少非零庫存的最小值是多少

直覺上想到排序,但每次操作都重新排序是 O(m·n log n),資料量大時會超時。

正確思路:用計數陣列 + 雙指針

不直接記錄每台虛擬機的庫存量,而是用一個陣列 cnt 記錄每種庫存量出現了多少次。舉例:如果庫存狀態是 [3, 3, 1, 5],那麼 cnt[1]=1, cnt[3]=2, cnt[5]=1

同時維護兩個指針:

每次租賃流程:

  1. 租金 = hi + lo,累加入答案
  2. cnt[hi] 減 1(最大庫存那一類少了一台)
  3. cnt[hi-1] 加 1(那一類庫存從 hi 降到了 hi-1
  4. 檢查是否需要移動指針:
    • cnt[hi] 歸零,hi 向左移(找新的最大值)
    • hi-1 < lo,說明產生了一個新的更低庫存,需要更新 lo
    • 若當前 lo 對應的 cnt[lo] 為零,lo 向右移

複雜度分析

關鍵洞察

這道題的精髓在於:不需要追蹤哪台機器的庫存是多少,只需要知道「有多少台機器的庫存恰好是 k」。把問題從追蹤個體轉換為追蹤分佈,雙指針就能以 O(1) 維護最大最小值。


T2:字串前綴最大等分塊數

題目核心

給定一個只含大寫字母的字串 S。對於 S 的每一個前綴,求出:最多能把該前綴等分成多少個子段,使得每個子段中每種字母出現的次數完全相同。

回傳一個陣列,第 i 個元素表示長度為 i 的前綴對應的最大分塊數。

解題思路

暴力做法:對每個前綴枚舉子段長度,逐段比較字元頻率,複雜度 O(n² · 26) 或更高,無法通過。

優化方向:隨機雜湊判斷子段頻率相等

直接比較兩個子段的字元頻率需要比較 26 個數,能不能壓縮成一個數來比較?

核心構造

  1. 為 A-Z 每個字母隨機分配一個 64 位元整數(隨機權重)
  2. 定義每個位置的雜湊貢獻值 = 該位置字母對應的隨機權重
  3. 計算雜湊值的前綴和陣列 H

這樣,H[r] - H[l] 就代表區間 [l+1, r] 的雜湊值之和。

關鍵性質:兩個子段的字元頻率完全相同,當且僅當它們的雜湊值相等(以極高機率成立)。

枚舉策略

複雜度:枚舉 L 時,對於每個 L,要檢驗的塊數是 n/L。總操作次數是 n/1 + n/2 + n/3 + ... + n/n = n·H(n)(調和級數),即 O(n log n)

為什麼隨機雜湊有效?

如果兩個子段字元頻率不同,它們的雜湊值相等的機率極低(約 1/2^64)。對於題目規模下的所有子段對,誤判機率可以忽略不計。這是競賽和面試中經典的「隨機化降維」技巧。

複雜度分析


兩題核心思路對比

題目 核心技巧 時間複雜度 空間複雜度
T1 虛擬機租賃 計數陣列 + 雙指針 O(n + m) O(max_val)
T2 前綴等分 隨機雜湊 + 調和級數枚舉 O(n log n) O(n)

常見思維誤區

題目 誤區 正確方向
T1 每次排序找最大最小 計數陣列,O(1) 更新
T1 用堆維護最大值但忽略最小值 雙指針同時維護 hi 和 lo
T2 直接比較 26 維頻率向量 隨機雜湊壓縮為單一整數
T2 枚舉所有子段對,O(n²) 調和級數枚舉,O(n log n)

Amazon OA 應試策略

Amazon OA 特點

臨場策略

  1. 先讀懂題,再動手——Amazon 題目描述較長,關鍵約束經常藏在最後幾行
  2. 先想暴力,再想優化——暴力解法能幫你理清狀態和轉移
  3. T1 類模擬題:先想「維護什麼狀態」,再想「怎麼高效更新」
  4. T2 類字串題:看到「頻率相等」立刻聯想雜湊,看到「枚舉長度」立刻聯想調和級數
  5. 寫完跑範例再提交,CodeSignal 有隱藏測試案例

相關 LeetCode 練習

題號 題目 對應 Amazon OA 考點
295 Find Median from Data Stream T1 動態維護雙端極值
1539 Kth Missing Positive Number T1 計數陣列思維
1316 Distinct Echo Substrings T2 字串雜湊
1044 Longest Duplicate Substring T2 隨機雜湊 + 枚舉

🚀 需要 Amazon OA 輔助?

oavoservice 專注北美大廠 OA/VO 全程輔助,Amazon OA 是我們的核心服務場景,高頻題庫覆蓋率極高。

立即加 WeChat:Coding0201

獲取:

📱 WeChat:Coding0201 | 💬 Telegram:@OAVOProxy | 📧 [email protected]