在竞争激烈的量化金融领域,Citadel 作为行业先锋,一直吸引着大量优秀学生。对想拿 Software Development Engineer(SDE)实习的同学来说,Citadel SDE Intern OA 是通往梦校实习岗位路上的关键门槛。本文把这套 OA 最常见的三道题完整拆开讲:题意、思路、复杂度、容易翻车的边界。
一、Citadel Intern OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | HackerRank |
| 题量 | 通常 3 道编程题 |
| 风格 | 模拟 + 字符串 + 图,重细节、重鲁棒性 |
| 难度 | 单题不算难,但条件多、易因理解偏差挂分 |
Citadel OA 的核心不是「会不会最优解」,而是「你写的代码够不够稳、边界处理得干不干净」。
二、题 1:Price Check(价格核对)
一家商店用老式收银机,价格靠人工录入,偶尔出错。给定商品列表及其正确价格,以及实际售出记录和录入价格,统计售价录入错误的次数。
def priceCheck(products, productPrices, productSold, soldPrice):
# 建立 商品名 -> 正确价格 的映射
correct = dict(zip(products, productPrices))
errors = 0
for name, paid in zip(productSold, soldPrice):
# 浮点比较留容差,避免 2.89 != 2.8900001 的精度坑
if abs(correct[name] - paid) > 1e-9:
errors += 1
return errors
复杂度:时间 O(n + m),空间 O(n)。
边界陷阱:价格是浮点数,千万别用 == 直接比,要留 1e-9 容差;售出商品一定在商品表里,但仍建议用 dict 而非线性查找,避免 O(n·m)。
三、题 2:Framing Text(文字加框)
给一个含多个单词的字符串,把每个单词单独占一行,整体用矩形框包起来,单词两侧各留一个空格。
例如 "Hello World in a frame":
+-------+
| Hello |
| World |
| in |
| a |
| frame |
+-------+
def print_boxed_text(input_str):
words = input_str.split()
width = max(len(w) for w in words) # 最长单词决定框宽
border = '+' + '-' * (width + 2) + '+'
lines = [border]
for w in words:
# 左对齐补到统一宽度,两侧各一个空格
lines.append('| ' + w.ljust(width) + ' |')
lines.append(border)
return '\n'.join(lines)
复杂度:时间 O(总字符数),空间 O(同)。
边界陷阱:框宽由最长单词决定,短单词要 ljust 左对齐补空格;顶部和底部边框的 - 数量是 width + 2(含两侧空格),少算一个就对不齐。
四、题 3:Recommendation System(好友推荐)
社交应用的好友推荐原型:
n个用户(0..n-1),m条好友关系。给用户 y 推荐用户 x 的条件是:x、y 还不是好友,且二者共同好友数最多。平局取索引最小者;没有候选则输出 -1。
from collections import defaultdict
def recommend(n, friendships):
adj = defaultdict(set)
for a, b in friendships:
adj[a].add(b)
adj[b].add(a)
result = []
for y in range(n):
best_user, best_mutual = -1, 0
for x in range(n):
if x == y or x in adj[y]:
continue # 跳过自己和已是好友的
mutual = len(adj[x] & adj[y]) # 共同好友数 = 邻接集合交集大小
# 共同好友更多则更新;平局因 x 递增遍历,自动取最小索引
if mutual > best_mutual:
best_mutual = mutual
best_user = x
result.append(best_user if best_mutual > 0 else -1)
return result
复杂度:朴素 O(n²·d)(d 为平均度数)。
边界陷阱:平局取最小索引——只要 x 从小到大遍历、用严格 > 更新即可自动满足;共同好友数为 0 时要输出 -1,别误推一个毫无关联的用户。
五、备战节奏
| 重点 | 建议 |
|---|---|
| 模拟题 | 把题意条件逐条列清单,写完对照核验 |
| 字符串格式题 | 注意对齐、边框宽度,本地多跑几组用例 |
| 图论题 | 邻接表/集合交集是高频,练熟共同好友、连通分量 |
| 时间控制 | 单题别死磕,先 AC 再优化 |
FAQ
Q1:Citadel Intern OA 难度高吗?
单题难度中等,但条件细、容错低。挂分的人多半不是不会算法,而是漏了一个边界条件或浮点比较用了 ==。稳比快更重要。
Q2:浮点价格比较为什么不能用 ==?
录入和存储可能有微小精度误差,2.89 在浮点里未必精确相等。用 abs(a-b) > 1e-9 判断更稳,这是 Price Check 最常见的翻车点。
Q3:好友推荐题一定要最优解吗?
不一定。n 不大时 O(n²) 集合交集就能过。重点是平局取最小索引、无候选输出 -1 这两个规则别写错。
Q4:OA 时间紧张写不完怎么办?
三题按熟悉度排序,先把有把握的 AC,留细节充裕的题最后做。我们提供 OA 辅助 / OA 代写:题型预测 + 限时陪练 + 实时给思路,帮你把会的稳稳拿下。
正在准备 Citadel SDE Intern OA?
这套 OA 考的是细节和鲁棒性,不是偏题怪题。如果你想要三题的限时陪练、量化金融公司 OA 的题型预测,或需要 OA 辅助 / OA 代写 的实时对接,欢迎联系交流,发岗位 JD 先做题型拆解,再排练习计划。
立即添加微信 Coding0201,获取 Citadel OA 真题与陪练。
联系方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy