← 返回博客列表 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获取真题


联系方式