一句话摘要: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 = [], [] # bids: 大顶堆 (-price, time, qty)
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