← 返回部落格列表 Susquehanna CodeSignal 程式 OA 深度拆解:三道真題骨架 + 70 分鐘節奏
Susquehanna

Susquehanna CodeSignal 程式 OA 深度拆解:三道真題骨架 + 70 分鐘節奏

2026-06-04

提到 Susquehanna(SIG)的 OA,多數人第一反應是 PSA 機率題和 90 秒心算。但如果你投的是 SDE / Software Developer 路線,真正卡人的其實是一套 CodeSignal 程式 OA——平台介面、計分邏輯、題目風格都和 PSA 完全不同。

很多同學拿著「機率題庫」準備,結果進考場發現是三道純演算法程式題,時間還卡得死死的。這篇就專門拆 SIG 的 CodeSignal 程式賽道:三道高頻題型骨架、完整 Python 解法、70 分鐘時間分配,以及最容易丟分的陷阱。

一、SIG CodeSignal 程式 OA 概覽

維度 詳情
平台 CodeSignal(General Coding Assessment 風格)
題量 通常 3-4 題,難度遞增
時長 70 分鐘左右(部分批次 60-90 分鐘)
語言 Python / C++ / Java 自選,Python 最省時
計分 按通過測試用例比例計分,部分分有效
考點 陣列/字串模擬、貪婪區間、圖遍歷、堆疊/雜湊

關鍵認知:CodeSignal 是按測試用例給部分分的。所以哪怕第三題做不完,把前兩題的邊界用例全過,比第三題寫一半暴力解更划算。先保分,再衝難題

二、題型一:交易撮合配對(陣列 + 雜湊)

題目描述

給定一個買單陣列 buys 和賣單陣列 sells,每個訂單是 (price, qty)。當某個買單價格 ≥ 某個賣單價格時可以撮合,成交量取兩者剩餘量的較小值。要求按「買價從高到低、賣價從低到高」的優先級撮合,回傳總成交量。

解題思路

這是典型的「雙優先級排序 + 雙指標」題。買方出價越高越想成交、賣方要價越低越想成交,所以買單按價格降序、賣單按價格升序,然後雙指標推進。

Python 解法

def total_matched_volume(buys, sells):
    # 買價從高到低,賣價從低到高
    buys = sorted(buys, key=lambda x: -x[0])
    sells = sorted(sells, key=lambda x: x[0])

    i = j = 0
    total = 0
    # 當前買/賣單剩餘量
    buy_left = buys[0][1] if buys else 0
    sell_left = sells[0][1] if sells else 0

    while i < len(buys) and j < len(sells):
        bp, _ = buys[i]
        sp, _ = sells[j]
        if bp < sp:
            # 最高買價都低於最低賣價,無法再撮合
            break
        deal = min(buy_left, sell_left)
        total += deal
        buy_left -= deal
        sell_left -= deal
        if buy_left == 0:
            i += 1
            buy_left = buys[i][1] if i < len(buys) else 0
        if sell_left == 0:
            j += 1
            sell_left = sells[j][1] if j < len(sells) else 0
    return total

時間複雜度:O(n log n + m log m),排序主導 空間複雜度:O(1) 額外空間(不計排序)

高頻陷阱

❌ 忘記「價格不匹配就 break」——繼續撮合會產生不存在的成交 ✅ 剩餘量歸零才推進指標,否則會漏掉同價多單

三、題型二:訂單簿區間合併(貪婪 + 區間)

題目描述

行情系統收到一批掛單價格區間 [lo, hi],表示該訂單在這個價位帶都可成交。要求合併所有重疊區間後,回傳「被至少一個訂單覆蓋的價格點總長度」。

解題思路

經典區間合併:按左端點排序,線性掃描,維護當前合併段 [cur_lo, cur_hi],重疊則擴展、不重疊則結算並開新段。

Python 解法

def covered_length(intervals):
    if not intervals:
        return 0
    intervals.sort(key=lambda x: x[0])
    total = 0
    cur_lo, cur_hi = intervals[0]
    for lo, hi in intervals[1:]:
        if lo <= cur_hi:
            # 區間重疊,擴展右端點
            cur_hi = max(cur_hi, hi)
        else:
            # 結算上一段,開新段
            total += cur_hi - cur_lo
            cur_lo, cur_hi = lo, hi
    total += cur_hi - cur_lo
    return total

時間複雜度:O(n log n) 空間複雜度:O(1) 額外空間

高頻陷阱

lo < cur_hi 寫成嚴格小於——相鄰區間 [1,3] [3,5] 會被錯誤拆開 ✅ 迴圈結束後別忘了結算最後一段 cur_hi - cur_lo

四、題型三:行情路由圖遍歷(BFS / 最短路)

題目描述

一個行情分發網路由 n 個節點構成,edges[i] = (u, v, latency) 表示雙向鏈路的延遲。從交易所節點 0 出發,求到達所有節點的最小延遲之和;若有節點不可達,回傳 -1

解題思路

帶權圖單源最短路,用 Dijkstra(堆優化)。最後把所有節點距離求和,遇到不可達直接判 -1

Python 解法

import heapq
from collections import defaultdict

def total_min_latency(n, edges):
    graph = defaultdict(list)
    for u, v, w in edges:
        graph[u].append((v, w))
        graph[v].append((u, w))

    dist = [float('inf')] * n
    dist[0] = 0
    pq = [(0, 0)]  # (累計延遲, 節點)
    while pq:
        d, node = heapq.heappop(pq)
        if d > dist[node]:
            continue
        for nxt, w in graph[node]:
            nd = d + w
            if nd < dist[nxt]:
                dist[nxt] = nd
                heapq.heappush(pq, (nd, nxt))

    if any(x == float('inf') for x in dist):
        return -1
    return sum(dist)

時間複雜度:O((V + E) log V) 空間複雜度:O(V + E)

高頻陷阱

❌ 用 BFS 當最短路——帶權圖 BFS 得到的是邊數最少,不是延遲最小 ✅ if d > dist[node]: continue 這行別省,否則堆裡的過期記錄會拖慢甚至出錯

五、70 分鐘時間分配建議

階段 時間 目標
通讀三題 0-5 min 判定難度排序,先易後難
題一(陣列/雜湊) 5-20 min 全過 + 邊界用例
題二(區間貪婪) 20-40 min 全過,重點測相鄰邊界
題三(圖/最短路) 40-63 min 先寫暴力保部分分,再優化
複查 63-70 min 跑自訂用例,查空輸入/單元素

核心心法:CodeSignal 給部分分,所以「三題各拿 80%」遠勝「兩題滿分一題 0 分」。卡住超過 8 分鐘立刻切題保分。

FAQ

Q1:SIG 的 CodeSignal OA 和 PSA 機率題是同一場嗎? 不是。PSA 是 Problem Solving Assessment(機率/邏輯/心算),CodeSignal 程式 OA 是 SDE 路線專屬的純演算法程式測試,兩者平台、計分、題型完全獨立。投 SDE 通常考後者。

Q2:CodeSignal OA 難度對標 LeetCode 什麼水平? 前兩題接近 LeetCode Medium,第三題(圖/最短路/DP)接近 Medium-Hard。重點不在偏題怪題,而在 70 分鐘內把三題都做到高通過率,時間壓力是真正的門檻。

Q3:可以用 Python 嗎?會不會因為慢被卡 TLE? 可以,且 Python 最省編碼時間。SIG 的資料規模通常不會卡 Python,只要演算法複雜度對(別在圖題用 O(V²))就不會 TLE。

Q4:做不完三題還有機會進面嗎? 有。CodeSignal 按測試用例比例給分,前兩題全過 + 第三題部分分,分數通常足夠進電話面。別為衝第三題滿分犧牲前兩題的邊界用例。

Q5:SIG 程式 OA 之後的流程是什麼? 程式 OA → 電話技術面(1-2 輪演算法 + 行為)→ Onsite(程式 + 系統/智力題 + 文化匹配)。OA 只是第一道篩子,過了要立刻準備電話面的即時編碼。

寫在最後

SIG 的 CodeSignal 程式 OA 不靠偏題取勝,靠的是在 70 分鐘裡把三道中等題穩穩全過。把交易撮合(雙指標)、區間合併(貪婪)、行情路由(Dijkstra)這三個骨架練到肌肉記憶,再配上「先保分後衝難題」的節奏,通過率會有質的變化。

如果你正在準備 SIG 的 SDE 路線,想要對應批次的 OA 真題還原、限時模考,或需要 OA 輔助 / OA 代面 的節奏對接,可以微信 Coding0201 聯繫,發崗位 JD 截圖,先做賽道判定(SDE 程式 vs Quant 機率),再排練習計劃。


需要面試真題? 立刻聯繫微信 Coding0201獲取真題


聯繫方式