说句实话,Citadel 的 OA 和普通大厂完全不是一个东西。
它不考你会不会做题,它考的是:你能不能在 90 分钟里保持冷静、写出工业级代码、连续 0 失误?这次两题我都一次性过了,整个过程非常“Citadel 风格”:不绕弯子、不讲情面,纯硬实力对决。下面把真题、我的思路、以及容易翻车的坑,全都拆给你看。
Citadel OA 流程
- 数量:2 题
- 时长:90 分钟
- 难度:中等偏上,但实现要求极严
- 重点能力:
- 代码准确性
- 边界处理
- 算法基本功(前缀和 / DP / 位运算)
- 心态稳定度
能写出来不难,但“写对并 AC”——这个才是 Citadel 想要筛掉 90% 人的地方。
Citadel OA 英文真题
Problem 1 — Count Stable Server Segments
Description
Given an integer array capacity[] representing server capacities, count all “stable” segments [l, r] (with r ≥ l + 2) such that:
capacity[l] == capacity[r], andcapacity[l] == sum(capacity[l+1 … r−1])
Return the number of stable segments.
T1|Stable Server Segments:前缀和 + 强观察力
这题如果没看出“要用前缀和”会直接死。
整个题考的是:
你能不能用常数时间算区间和 → 再稳定遍历所有合法区间。
我的做法:
- 前缀和 prefix 先打好
- 双层循环,看所有 l,再看所有 r ≥ l+2
- 条件判断要非常小心:
capacity[l] == capacity[r]capacity[l] == prefix[r-1] - prefix[l]
这题 O(n²) 就够了,Citadel 的数据范围允许你暴力,只要写得干净就能 AC。
真正能区分人的,是你能不能一遍写对,不漏边界。
Problem 2 — Goodness Values of Increasing Subsequences
Description
Given an array nums, consider all strictly increasing subsequences.
The goodness value of a subsequence is defined as the bitwise OR of all its elements.
Return all distinct goodness values, sorted in ascending order.
T2|Goodness Values:集合 DP + 位运算
这题稍微有点味道了。
它不是 brute force subsequence,而是:
对所有现有 goodness 状态尝试扩展出新的状态。
代码结构类似 DP,但形式更像“状态集合滚动更新”。
思路:
- 一个 set 存当前所有 goodness 值,初始
{0} - 遍历 nums 中每个 x
- 对集合中每个值尝试
val | x生成新状态 - 注意必须满足 subsequence 是 strictly increasing(题面保证你处理 last value)
- 临时集合 🔁 主集合
- 最后排序输出
这题很 Citadel:
不算难,但你要写得 干净、无重复、无越界、无逻辑错误。
为什么这套 OA 有杀伤力?
Citadel 的题不是给你“难倒你”,
而是给你“足够简单,但你一粗心就寄”的那种。
考的就是“冷静 + 稳定度”。
你只要心态炸了、sum 写错、OR 写错、set 更新错……
一个点卡死你整题直接 0 分。
这就是为什么这么多大厂面霸,到 Citadel 照样挂。
我这次是怎么做到 0 失误?
我这次全程带 programhelp 的无痕助攻:
不是代写,而是那种——
“你这个区间是不是漏掉等号?”
“这步你先别急,把边界检查一遍。”
“这里可以提前 break,提高稳定性。”
就像你背后站着一个资深 quant/engineer,
在关键点帮你踩住刹车,避免你在 UI 压力下犯错。
Citadel OA,绝对不是刷题量能解决的,
心态和稳定度要远大于思路本身。