← 返回博客列表
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 是我们的核心服务场景,高频题库覆盖率极高。

立即添加微信:Coding0201

获取:

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