Amazon 最新 OA 双题技术复盘:差分+二分与翻转移位最短步数(含 Python 模板与 2026 上岸案例)

目录

题目一:区间内“恰好 k 个进程运行”的秒数

核心目标是回答多个查询:在 [l, r] 内,有多少秒并发数恰好为 k

最优思路

  1. 用差分数组记录每个进程区间的 +1/-1 变化。
  2. 前缀和还原每一秒并发数 countAtTime[t]
  3. 把“并发数相同的秒”按 k 分桶存为有序列表。
  4. 每个查询对对应桶做二分,统计落在 [l, r] 的秒数。

Python 参考实现

from bisect import bisect_left, bisect_right
from collections import defaultdict
from typing import List

def count_exact_process_seconds(
    starts: List[int],
    ends: List[int],
    query_process: List[int],
    query_start: List[int],
    query_end: List[int]
) -> List[int]:
    max_time = max(max(starts), max(ends), max(query_end))
    delta = [0] * (max_time + 2)

    for s, e in zip(starts, ends):
        delta[s] += 1
        delta[e + 1] -= 1

    process_to_times = defaultdict(list)
    running = 0
    for t in range(max_time + 1):
        running += delta[t]
        process_to_times[running].append(t)

    ans = []
    for k, l, r in zip(query_process, query_start, query_end):
        arr = process_to_times.get(k, [])
        ans.append(bisect_right(arr, r) - bisect_left(arr, l))
    return ans

复杂度

  • 预处理:O(T + n)T = max_time
  • 每次查询:O(log M)M 为该并发值桶长度
  • 总体:O(T + n + q log M)

高频扣分点:end 是闭区间,差分必须在 end + 1-1


题目二:翻转 + 移位的最少操作次数

操作只有两种:

  • 整体翻转 R
  • 首元素移到末尾 S(左旋 1 位)

关键观察

可达状态只会落在两类:

  1. 升序环形旋转([1..n] 的旋转)
  2. 降序环形旋转([n..1] 的旋转)

所以先判型,再套最短步数公式即可。

Python 参考实现

from typing import List

def min_ops_sort_with_reverse_and_shift(nums: List[int]) -> int:
    n = len(nums)
    if n <= 1:
        return 0

    def is_asc_cycle(a: List[int]) -> bool:
        for i in range(n):
            if a[(i + 1) % n] != (a[i] % n) + 1:
                return False
        return True

    def is_desc_cycle(a: List[int]) -> bool:
        for i in range(n):
            expected = ((a[i] - 2) % n) + 1
            if a[(i + 1) % n] != expected:
                return False
        return True

    if is_asc_cycle(nums):
        # nums = 升序左旋 t 位
        t = nums[0] - 1
        # 方案1:一直左旋回正;方案2:R + 左旋 t 次 + R(等价右旋 t)
        return min((n - t) % n, t + 2)

    if is_desc_cycle(nums):
        # nums = 降序左旋 t 位
        t = (n - nums[0]) % n
        # 先翻转一次回到升序方向,再选更短旋转方向
        return 1 + min(t, n - t)

    # 题目保证可排好;这里仅做健壮性兜底
    return -1

复杂度

  • 判型 + 计算:O(n) 时间,O(1) 额外空间。

2026 上岸案例(通过我们服务)

2026 年 2 月,深圳后端工程师 K 同学(6 年 Java,连续 2 次 OA 挂在边界用例)报名我们的 Amazon OA 冲刺服务。 我们做了三件事:

  • 用“差分 + 二分模板”重写其区间题代码,统一闭区间处理。
  • 用“环形判型 + 最短步数公式”替换暴力 BFS。
  • 按 Amazon 评分习惯补齐复杂度口述与测试策略。

结果:第 9 天完成 OA 两题全过,第 5 周拿到 SDE II Offer。 这类候选人最常见的问题不是不会写,而是“写得慢 + 边界不稳 + 口述不结构化”。


立即预约:1v1 OA 诊断

立即预约 1v1 Amazon OA 诊断

你将拿到:

  • 你的 OA 薄弱点定位(算法 / 代码实现 / 时间分配)
  • 7 天可执行刷题清单
  • 可直接背诵的复杂度与 trade-off 话术模板

面试救急

面试救急通道(48 小时内排期)
如果你已经收到 OA/VO 邀请,但准备时间不足 7 天,我们提供高强度救急方案:

  • 当日做题诊断 + 次日补漏洞训练
  • 岗位定制高频题与行为题脚本
  • 一次模拟面试 + 一次复盘纠错

现在预约,优先安排本周面试官级教练时段。

Previous
Previous

Marshall Wace 2026 量化电面复盘:3道高频算法题 Python 最优解 + 真实上岸方法论

Next
Next

2026最新 Akuna Capital 技术电面真题解析:寻找缺失与重复元素的极客解法