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:非递减数组最小增量总和(Min Increment to Non-Decreasing)
题目核心
给定一个数组(题目场景中是功率/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 高频题库覆盖率极高。
立即添加微信:Coding0201
获取:
- ✅ Amazon OA 实时辅助(屏幕共享 + 实时打字提示)
- ✅ HackerRank / CodeSignal 真实题库(覆盖 80%+ 高频题)
- ✅ 一对一模拟 OA + 详细反馈
- ✅ VO 面试辅助(算法 + 系统设计)
📱 微信:Coding0201 | 💬 Telegram:@OAVOProxy | 📧 [email protected]