← 返回部落格列表 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