← 返回部落格列表 Citadel New Grad 三輪 VO 複盤:排列等式 / DMV 任務分配負載均衡 / 字元版拓撲排序
Citadel

Citadel New Grad 三輪 VO 複盤:排列等式 / DMV 任務分配負載均衡 / 字元版拓撲排序

2026-06-06

網上 Citadel 的三輪 video interview 題目資源非常少,尤其是 new grad 版本。這篇詳細記錄整個流程,尤其是三輪 VO 的 coding 內容。Citadel 的題目不只是刷題那麼簡單,很多貼近實際工作中的 模型設計、系統模擬、貪心策略——而最關鍵的,是溝通能力。

一、Citadel New Grad 面試概覽

維度 詳情
入口 海投,免 OA 直進 screening
Screening 45 分鐘,輕鬆聊專案 + 1 道 backtracking
正式 VO 2 小時 15 分,三輪 back-to-back,中間無休息
每輪結構 簡歷 / BQ + 演算法 coding(約 45 分鐘)
平台 Citadel 專屬 video + 編輯器一體平台

二、Screening:排列等式(回溯)

把數字 1 到 9 分別填入 ABC、DEF、GHI 三個三位數的位置,要求 ABC + DEF = GHI,不能重複數字,問總共有多少種有效組合。

思路轉化:典型 backtracking 基礎題。枚舉 1-9 的所有排列,每 3 位劃分成 ABC、DEF、GHI,判斷是否滿足等式。面試官說「有些人會卡在如何生成合法 permutation 上」。

from itertools import permutations

def count_valid():
    count = 0
    for p in permutations(range(1, 10)):   # 9 個數字的全排列
        abc = p[0] * 100 + p[1] * 10 + p[2]
        de_f = p[3] * 100 + p[4] * 10 + p[5]
        ghi = p[6] * 100 + p[7] * 10 + p[8]
        if abc + de_f == ghi:
            count += 1
    return count

複盤:9! = 362880 種排列,暴力完全可接受。面試官最後一起跑了幾個 sample 驗證。時間複雜度:O(9!);空間複雜度:O(1)(不計排列生成)。

三、第一輪 VO:DMV 任務分配負載均衡

一個 DMV 辦公室,每個員工有一個 multiplier 代表工作速度(multiplier=2 表示處理任務耗時翻倍)。每個任務有一個 base duration(multiplier=1 時的標準耗時)。員工只能串行做任務,任務不可拆分。自行決定如何分配任務,返回完成所有任務的最短總時間。

思路轉化:典型 load balancing。把任務按耗時從大到小排序,用一個 最小堆 模擬每個員工當前的累積完成時間,貪心地把任務分配給當前最空閒的員工,分配時乘以該員工的 multiplier。

import heapq

def min_completion_time(base_durations, multipliers):
    # 堆裡存每個員工的「當前累積完成時間」,初始 0
    heap = [(0.0, m) for m in multipliers]
    heapq.heapify(heap)
    # 大任務先分配,避免最後塞不下
    for dur in sorted(base_durations, reverse=True):
        finish, mult = heapq.heappop(heap)
        finish += dur * mult            # 該員工處理這個任務的實際耗時
        heapq.heappush(heap, (finish, mult))
    return max(finish for finish, _ in heap)

複盤:所有 I/O 也要自己寫,實作比較冗長,但邏輯不難。面試官確認通過,並提到「這題有很多不同分配方式,只要邏輯合理就行」。時間複雜度:O(n log m)(n 任務,m 員工);空間複雜度:O(m)。

四、第二輪 VO:不熟的題 + 溝通卡殼(掛的主因)

這輪是掛的主要原因。題目是沒刷過的原題,一上來有點懵。面試官全程冷漠、不給提示。我的思路其實可行——想用一種結構存儲狀態——但面試官堅持要我用另一種類型。我們在 representation 上糾結很久,最後硬著頭皮遷就,結果類型轉換搞暈,邏輯出 bug,沒時間 debug。

最大教訓:遇到不熟的題 + 溝通不暢 + 時間壓力時,怎麼讓面試官跟上你的節奏、怎麼在衝突中找到折中,可能比題本身更影響成敗。事後複盤發現我原本的方法是能跑通的,純粹是雙方理解和程式碼風格差太多。

五、第三輪 VO:字元版拓撲排序

輸入是多個字元對,代表有向邊 A -> B,同時提供一個字元全集。要求輸出一個滿足所有順序約束的合法字元順序,可以有多個解,返回任意一個。

思路轉化:變種 topological sort(類似 Alien Dictionary)。構建圖 + 入度表,用 Kahn 演算法(BFS + in-degree) 輸出合法順序。

from collections import deque, defaultdict

def find_order(pairs, all_chars):
    graph = defaultdict(list)
    indeg = {c: 0 for c in all_chars}
    for a, b in pairs:                  # a -> b
        graph[a].append(b)
        indeg[b] += 1

    q = deque(c for c in all_chars if indeg[c] == 0)
    order = []
    while q:
        c = q.popleft()
        order.append(c)
        for nxt in graph[c]:
            indeg[nxt] -= 1
            if indeg[nxt] == 0:
                q.append(nxt)
    return order if len(order) == len(all_chars) else []   # 有環則無解

複盤:之前刷過類似題,寫得比較順。面試官一邊輸入樣例一邊驗證,全部正確,還給了優化建議,交流體驗很好。時間複雜度:O(V+E);空間複雜度:O(V+E)。

六、面後總結

輪次 結果 關鍵
Screening 順利 專案隨便聊 + 回溯基礎題
VO 第一輪 順利 負載均衡,貪心 + 最小堆
VO 第二輪 翻車 不熟的題 + 溝通卡殼 + 時間吃緊
VO 第三輪 順利 拓撲排序,交流體驗好

三四天後收到 rejection。Citadel 流程快、技術含量高,溝通能力真的很關鍵,尤其面對不熟或複雜題目時。


FAQ

Q1:Citadel New Grad 一定要做 OA 嗎?

不一定。這次是海投、沒有內推,甚至沒做 OA 就直接收到 screening 電話邀請——他們可能根據簡歷挑了一批人直接進 screening。

Q2:Citadel 三輪 VO 是什麼節奏?

2 小時 15 分鐘三輪 back-to-back,中間沒有休息。每輪約 45 分鐘,開頭簡歷 / BQ,後半段演算法 coding。在 Citadel 專屬的 video + 編輯器一體平台進行,不是 HackerRank 或 CoderPad。

Q3:Citadel 的題難嗎?考什麼方向?

不只是刷題。很多貼近實際工作的模型設計、系統模擬、貪心策略,比如 DMV 任務分配負載均衡。也有偏標準的題如字元版拓撲排序、排列回溯。難點常在臨場溝通而非演算法本身。

Q4:怎麼避免第二輪那種溝通翻車?

當面試官堅持某種 representation 時,先確認對方意圖再動手,必要時主動說明你的方案能跑通並請求保留。練習時刻意模擬「冷漠面試官 + 不熟題」場景,訓練在衝突中找折中。我們的 VO 輔助 / VO 代面 / 面試輔助 可以陪你專門演練這類高壓溝通場景。


正在準備 Citadel New Grad VO?

Citadel 三輪連面強度高,貪心 / 模擬 / 拓撲題 + 臨場溝通都是關鍵。如果你想要這三道真題的限時陪練、負載均衡 / 拓撲排序專項,或「冷漠面試官」場景的溝通訓練,歡迎交流:發職缺 JD 先做題型預測,再排練習計畫,也支援 VO 輔助 / VO 代面 / 面試輔助 的即時對接。

立即新增微信 Coding0201獲取 Citadel VO 真題與陪練

聯絡方式