Optiver 阿姆斯特丹 / 芝加哥 / 悉尼三地的 SWE 岗位在 2026 春招继续开放,OA 仍由 HackerRank / 自研平台二选一发放。我们结合一亩三分地最近 90 天发帖整理:题型基本固定在 Order Book 撮合、Trading Sequences 数列模拟、Allocation 分配 三条主线,每条都对应一道核心算法 + 一段业务封装。下面按真题密度排序拆解,并补充 OA辅助 的具体接入方式。
Optiver SWE OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | HackerRank / 自研在线 IDE |
| 时长 | 70–90 分钟 |
| 题量 | 2–3 道(含 1 道偏 simulation) |
| 难度 | LC Medium 为主,1 道带 Hard 收尾 |
| 评分 | 全自动判题 + 隐藏 corner case |
| 反馈 | 一亩三分地 2026 帖子约 65% 反馈三题全过即进下一轮 |
题型一:Order Book 撮合
题目描述
实现一个最小可行的 Limit Order Book,支持 add(side, price, qty) 与 match() 两个操作。每次调用 match() 撮合所有可成交对,返回成交序列 [(buy_id, sell_id, price, qty), ...]。
Python 解法
import heapq
from collections import defaultdict
class OrderBook:
def __init__(self):
self.buys = [] # max-heap: (-price, ts, oid, qty)
self.sells = [] # min-heap
self.qty = defaultdict(int)
self.ts = 0
def add(self, side, price, qty, oid):
self.ts += 1
self.qty[oid] = qty
if side == 'B':
heapq.heappush(self.buys, (-price, self.ts, oid))
else:
heapq.heappush(self.sells, (price, self.ts, oid))
def match(self):
fills = []
while self.buys and self.sells and -self.buys[0][0] >= self.sells[0][0]:
bp, _, bid = self.buys[0]
sp, _, sid = self.sells[0]
q = min(self.qty[bid], self.qty[sid])
fills.append((bid, sid, sp, q))
self.qty[bid] -= q
self.qty[sid] -= q
if self.qty[bid] == 0:
heapq.heappop(self.buys)
if self.qty[sid] == 0:
heapq.heappop(self.sells)
return fills
时间复杂度:每次 match 平均 O(k log n),k 为本轮成交单数。
题型二:Trading Sequences
题目描述
给定每秒成交价数组 prices[],找出最长非递减子段且子段平均价 ≥ 全局均价。
Python 解法
def longest_strong_run(prices):
if not prices:
return 0
avg = sum(prices) / len(prices)
best = cur_len = 0
cur_sum = 0
start = 0
for i, p in enumerate(prices):
if i > 0 and prices[i] < prices[i - 1]:
start = i
cur_sum = 0
cur_sum += p
cur_len = i - start + 1
if cur_sum / cur_len >= avg and cur_len > best:
best = cur_len
return best
时间复杂度:O(n)。这道题在一亩三分地反复出现,注意 >= 而非 >。
题型三:Allocation
题目描述
n 个客户对一篮子标的下达申购量 demand[i],可用总量 S < sum(demand)。按「比例 + 整手取整 + 余量按时间戳分配」规则给每个客户分配最终成交量。
Python 解法
def pro_rata_allocate(demands, ts, S, lot=1):
n = len(demands)
total = sum(demands)
base = [(d * S) // total // lot * lot for d in demands]
used = sum(base)
leftover = S - used
order = sorted(range(n), key=lambda i: ts[i])
i = 0
while leftover >= lot and i < n:
idx = order[i]
if base[idx] < demands[idx]:
base[idx] += lot
leftover -= lot
i = (i + 1) % n if leftover >= lot else i + 1
return base
时间复杂度:O(n log n),瓶颈在排序。
一亩三分地高频题速查
| 题型 | 90 天频率 | 核心模板 |
|---|---|---|
| Order Book 撮合 | ★★★★★ | 双堆 + 数量字典 |
| Trading Sequences | ★★★★ | 单调段 + 均价滑动 |
| Pro-rata Allocation | ★★★★ | 取整 + 余量轮询 |
| 价差最大化 | ★★★ | 单调栈 / 双指针 |
| 字符串行情解析 | ★★ | 正则 + 状态机 |
OA辅助 实战路径
oavoservice 的 OA辅助 服务
针对 Optiver SWE OA 这种「全自动判题 + 隐藏 corner case」的特点,oavoservice 的 OA辅助 提供:
- 题型分桶:把一亩三分地 30 天内的 Optiver 帖按主线分为 Order Book / Trading / Allocation 三桶,每桶配 5 道变体
- 限时模拟:mentor 出题,按真实 70 分钟节奏跑,结束后即时复盘 corner case
- OA 当天实时辅助:针对自研平台 OA 提供低延迟思路核对,特别针对 Allocation 这种规则细节多的题
- VO 衔接:进 onsite 后可直接切换 VO 辅助 套餐,mentor 不变
具体方案与报价,加微信 Coding0201 沟通。
从盲刷到顺利通过 Optiver OA
这次很高兴能帮助这批同学顺利通过 Optiver SWE OA。我们发现很多同学准备 OA 时,光靠自己刷一亩三分地的帖子效率其实不高——一是题面会换,二是 Optiver 特别看 corner case 边界,单靠 LC Medium 刷题量很难覆盖。
如果你也在准备 Optiver、Citadel、Jane Street、IMC 这类量化 SWE 的 HackerRank / 自研平台 OA,感觉一个人复习方向模糊、节奏不稳,欢迎联系 oavoservice。我们会根据你的具体水平和弱点,提供专业的 OA 实战辅助服务和一对一指导,把题型分桶、限时模拟、当天思路核对全部打通。
FAQ
Optiver SWE OA 难度和 LeetCode 比是什么水平?
主体 LC Medium,但每场至少有一道带 Hard 级 corner case 收尾的 simulation 题,需要你在 70–90 分钟内同时处理算法 + 业务规则。
Optiver 哪几个城市的 OA 题库一致?
阿姆斯特丹、芝加哥、悉尼三地题库 80% 共享,少量本地化变体。一亩三分地反馈过最近批次三地 Order Book 题完全相同。
自研平台和 HackerRank 平台有什么区别?
自研平台允许你自己写测试用例,但隐藏 case 更严;HackerRank 给出 sample case 但不允许自定义运行环境。建议两套都练。
OA 没过冷却期多久?
通常 6 个月,跨地区办公室单独计数。换岗位(如 SWE → Trading)一般另算池子,可以更早再投。
正在准备 Optiver SWE OA / VO?
oavoservice 长期追踪 Optiver / Citadel / Jane Street / IMC 等量化机构的 OA + VO 真题。我们的 mentor 来自一线做市 / 自营团队,可以提供 题型分桶、限时模拟、自研平台实时辅助、行为面剧本 等 OA辅助 服务。
👉 立即添加微信:Coding0201,获取 Optiver 高频题与 OA辅助 方案。
联系方式
Email: [email protected]
Telegram: @OAVOProxy