一句話摘要:HRT OA 是 70 分鐘 4 題的 CodeSignal 測評,強調時間序列處理、階梯函數與高吞吐量資料結構,能寫乾淨 O(n log n) 解就能穩進面試。
HRT(Hudson River Trading,哈德遜河交易公司)是紐約高頻做市的頭部量化機構,其 OA 在所有量化 OA 裡屬於「題目工程化、考察實作」的典型——不像 Jane Street 重純數學,也不像 Optiver 重交易直覺,HRT 更看重你能不能用整潔的程式碼處理真實的市場資料流。
下面這篇文章按「題型 → 真題 → 解法 → 備考策略 → FAQ」的順序幫你完整準備 HRT OA。
一、HRT OA 基本資訊
| 項目 | 詳情 |
|---|---|
| 平台 | CodeSignal |
| 時長 | 70 分鐘 |
| 題量 | 4 題(難度遞增) |
| 語言 | Python / C++ / Java(推薦 Python) |
| 題目 | 英文,結合金融場景但不需要金融知識 |
| 通過線 | 滿分 600,建議 ≥ 500 |
| 邀請來源 | 校招 + Referral,部分透過 LinkedIn Sourcer |
和其他量化 OA 的差別:HRT 不出機率題、不出腦筋急轉彎,全部是 LeetCode 風格的中等偏難演算法題。所以「刷題派」反而占便宜。
二、HRT OA 題型分布與高頻考點
根據近 12 個月的真題回饋,HRT OA 大致按以下結構出題:
| 題號 | 難度 | 高頻考點 | 推薦用時 |
|---|---|---|---|
| Q1 | Easy | 模擬 / 字串 / 簡單陣列 | 5-10 分鐘 |
| Q2 | Medium | 雜湊表 + 滑動視窗 | 10-15 分鐘 |
| Q3 | Medium-Hard | 階梯函數 / 區間合併 / 差分陣列 | 20-25 分鐘 |
| Q4 | Hard | 時間序列 + 堆 / 二分 / 線段樹 | 25-30 分鐘 |
最容易丟分的是 Q3——很多同學只會寫 O(n²) 的暴力解,導致大用例 TLE。
三、真題示例與解法
題型一:階梯函數(Step Function)求最大值
題目:給一組形如 [(start, end, value)] 的事件,每個事件在 [start, end) 時間內貢獻 value 單位負載,求任意時刻的最大瞬時負載。
暴力解 O(n × m):掃每個時刻,逾時
def maxLoadBrute(events):
timeline = [0] * 1_000_001
for s, e, v in events:
for t in range(s, e):
timeline[t] += v
return max(timeline)
最優解 O(n log n):差分陣列 + 排序事件點
def maxLoad(events):
points = []
for s, e, v in events:
points.append((s, v)) # 進入
points.append((e, -v)) # 離開
points.sort()
cur = best = 0
for _, delta in points:
cur += delta
best = max(best, cur)
return best
關鍵技巧:把「區間」轉換為「事件流」,掃描一遍即可。HRT 非常喜歡這種事件流抽象。
題型二:時間序列視窗聚合
題目:給一系列 tick (timestamp, price),對每個 tick 輸出過去 5 秒內的最大價格。
最優解 O(n):單調佇列
from collections import deque
def slidingMaxPrice(ticks, window=5):
dq = deque()
res = []
for t, p in ticks:
while dq and dq[0][0] < t - window:
dq.popleft()
while dq and dq[-1][1] <= p:
dq.pop()
dq.append((t, p))
res.append(dq[0][1])
return res
複雜度:每個元素入隊出隊各一次 → O(n)。HRT 的高頻考點之一是把 LeetCode 239 改成時間戳記版本。
題型三:訂單匹配(貪婪 + 優先佇列)
題目:買單與賣單陸續到達,價格相同時按時間優先成交。求總成交量。
import heapq
def matchOrders(orders):
bids, asks = [], []
volume = 0
for side, price, qty, t in orders:
if side == 'B':
while qty and asks and asks[0][0] <= price:
ap, at, aq = heapq.heappop(asks)
m = min(qty, aq)
volume += m
qty -= m
if aq > m:
heapq.heappush(asks, (ap, at, aq - m))
if qty:
heapq.heappush(bids, (-price, t, qty))
else:
while qty and bids and -bids[0][0] >= price:
bp, bt, bq = heapq.heappop(bids)
m = min(qty, bq)
volume += m
qty -= m
if bq > m:
heapq.heappush(bids, (bp, bt, bq - m))
if qty:
heapq.heappush(asks, (price, t, qty))
return volume
易錯點:剩餘數量要重新入堆;價格優先 + 時間優先的比較順序不能反。
四、備考策略:從入門到 500+
| 階段 | 週期 | 重點 |
|---|---|---|
| 基礎 | 1-2 週 | LeetCode 陣列/雜湊/雙指針 60 題 |
| 強化 | 1-2 週 | 滑動視窗、單調堆疊/佇列、堆 30 題 |
| 模擬 | 1 週 | CodeSignal Industry Coding 框架 4 套 |
| 衝刺 | 3-5 天 | HRT 風格階梯函數與訂單簿 10 題 |
強烈建議:用 CodeSignal 自帶的官方 General Coding Framework 模擬,不要只刷 LeetCode 原題,因為 CodeSignal 的 IDE 沒有 LeetCode 的輸入解析便利。
五、FAQ:HRT OA 高頻問題答疑
Q1:HRT OA 多少分能進 VO?
通常 500/600 是面試線,部分組(尤其是 SDE 與 Algo Dev)會要求 560+。Quant Researcher 路徑需要滿分附加題。
Q2:HRT OA 可以用 Python 嗎?效能夠嗎?
完全可以。HRT 測試用例規模一般 n ≤ 10⁵,O(n log n) 的 Python 解通常在 1-2 秒內完成。但 Q4 時間緊時建議預先寫好 input = sys.stdin.buffer.read().split() 加速讀入。
Q3:HRT OA 做完是不是就直接 VO?
不一定。HRT 會綜合 OA 分數 + 履歷篩選。OA 高分但履歷薄弱仍可能被拒;反之,履歷強勢(頂校 ICPC、知名實習)即使 OA 在線也可能被 fast track。
Q4:HRT OA 題目會重複嗎?
會。題庫較大但循環出題,2024-2026 年間多次出現「事件流最大並行」「帶 cooldown 的訂單匹配」等改編版本。建議刷過往真題。
Q5:HRT OA 失敗後多久能重考?
官方 Cooldown 通常為 6 個月。期間投遞會被自動拒。
六、HRT VO 後續:你需要知道什麼
通過 OA 之後會進入 2-4 輪 VO,包括:
- Coding 輪:1-2 道 LeetCode Hard,注重最優複雜度與程式碼風格
- System Design 輪(僅 senior):高頻交易系統、訂單簿、訊息匯流排
- Behavioral / Culture Fit:HRT 強調研究氛圍與協作文化
- Onsite Lunch / Coffee Chat:非淘汰,但用於綜合評估
七、外部連結與延伸閱讀
🚀 需要 HRT OA / VO 輔助?
如果你正在準備 HRT 或類似量化公司(Citadel、Jane Street、Optiver、SIG)的 OA / VO,歡迎交流:可提供題型拆解、變體練習建議和 VO 階段的即時輔助。
👉 立即加微信:Coding0201,取得真題與一對一備考方案
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy