← 返回博客列表 Optiver OA 核心题型解法:如何快速破题
Optiver

Optiver OA 核心题型解法:如何快速破题

2026-06-09

Optiver 作为顶级做市商,OA 的风格和普通互联网公司截然不同:它既考算法实现,也考你对概率、市场机制的直觉。本文聚焦最高频的三类题,重点讲「如何在限时内快速找到最优解」。

Optiver OA 概览

维度 详情
平台 HackerRank / CodeSignal / 自有系统
时长 60–75 分钟
题量 2–4 题(编码 + 心算/概率)
难度 LeetCode Medium 偏上,重思维
考察重点 模拟、概率期望、贪心/最优执行

核心题型一:做市撮合模拟

给定一串买卖订单,模拟订单簿撮合,输出成交价与剩余挂单。破题关键是用两个堆维护买卖盘

import heapq

def match_orders(orders):
    buy = []   # 最大堆(存负价):买方出价越高越优先
    sell = []  # 最小堆:卖方报价越低越优先
    trades = []
    for side, price, qty in orders:
        if side == 'BUY':
            while qty > 0 and sell and sell[0][0] <= price:
                sp, sq = heapq.heappop(sell)
                traded = min(qty, sq)
                trades.append((sp, traded))
                qty -= traded
                if sq > traded:
                    heapq.heappush(sell, (sp, sq - traded))
            if qty > 0:
                heapq.heappush(buy, (-price, qty))
        else:
            while qty > 0 and buy and -buy[0][0] >= price:
                bp, bq = heapq.heappop(buy)
                traded = min(qty, bq)
                trades.append((-bp, traded))
                qty -= traded
                if bq > traded:
                    heapq.heappush(buy, (bp, bq - traded))
            if qty > 0:
                heapq.heappush(sell, (price, qty))
    return trades

时间复杂度:O(n log n)。破题提示:看到「撮合 / 订单簿」立刻想到双堆。

核心题型二:概率期望与心算

Optiver 偏爱期望值题,比如「掷骰子直到出现 6,期望次数?」这类。编码版常要求模拟或闭式计算。

def expected_rolls_until(target_faces, sides=6):
    # 几何分布期望 = 1 / p,p = target_faces / sides
    p = target_faces / sides
    return 1 / p

破题提示:先判断是否服从几何分布或线性期望(期望可加性),多数题不需要真模拟。

核心题型三:最优执行 / 贪心

「在 T 个时间步内卖出 N 股,每步价格不同,最大化收益」。本质是带约束的贪心或 DP。

def max_revenue(prices, shares, per_step_limit):
    # 优先在高价时间步卖出,受每步上限约束
    revenue = 0
    remaining = shares
    for price in sorted(prices, reverse=True):
        sell = min(remaining, per_step_limit)
        revenue += sell * price
        remaining -= sell
        if remaining == 0:
            break
    return revenue

时间复杂度:O(n log n)。

时间分配策略

Optiver OA 时间紧,建议:先扫一遍所有题,优先做心算/概率题(耗时短、确定性高),再攻编码模拟题,把最耗时的最优执行题留最后。


FAQ

Optiver OA 难度如何? 编码题在 LeetCode Medium 偏上,但真正的难点是概率与市场直觉题,需要的是数学思维而非纯刷题。

Optiver OA 用什么平台、时长多久? 多为 HackerRank/CodeSignal 或自有系统,60–75 分钟,2–4 题,含编码与心算/概率。

SWE 和 Trader 的 OA 一样吗? 不完全一样。SWE 偏编码模拟,Trader 岗心算与概率比重更大、限时更短。

心算题完全不会怎么办? 我们提供 Optiver OA辅助 与 OA代面:针对心算、期望值与做市模拟做专项训练,帮你建立快速破题的条件反射。


正在准备 Optiver 的 OA?

Optiver OA 的关键是「快」:在极短时间内识别题型、套对模型。我们的导师可提供做市模拟、概率期望与最优执行的专项拆解。需要系统规划,欢迎交流,立刻联系微信 Coding0201获取真题与备考资料


联系方式

Email: [email protected] Telegram: @OAVOProxy