Goldman SachsOAHackerRankCodingTechnical Interview

高盛 (Goldman Sachs) OA 在线笔试真题解析 — HackerRank 120 分钟完整面经

Goldman Sachs Engineering OA 真题详解:HackerRank 120 分钟两道算法题完整复盘,多序列匹配 + 搜索优化、优化分组与动态规划思路

Sam · · 7 分钟阅读

高盛 (Goldman Sachs) OA 在线笔试真题解析

本文基于 2025 年 10 月真实候选人面经整理,还原 Goldman Sachs Engineering OA 完整题目与解题思路。

整体结构

Goldman Sachs 的 Engineering OA,整体体验比预期更偏算法思维一些。平台是 HackerRank,时长 120 分钟,两道题都偏向 data structure 与逻辑推理结合,时间分配建议 40% / 60%。

项目详情
平台HackerRank
时长120 分钟
题目数量2 道
监考摄像头 + 屏幕录制
语言不限(Python/Java/C++ 等)
通过率即时判分,无明确通过线

第一题:多序列匹配 + 搜索优化

题目描述

给定两个递增数组 A 和 B,要为每个 A[i] 找出在 B 中第一个满足某种复杂约束的索引(例如 B[j] > A[i] 且 B[j] - A[i] 是质数)。

输入:

  • 两个递增数组 A 和 B
  • 约束条件(B[j] > A[i] 且 B[j] - A[i] 是质数)

输出:

  • 对于每个 A[i],输出在 B 中满足条件的第一个索引 j

示例:

A = [3, 7, 12]
B = [5, 8, 10, 13, 17, 19]

对于 A[0] = 3:
  B[0] = 5, 5-3 = 2 (质数) ✓ → 输出 0

对于 A[1] = 7:
  B[0] = 5 (5<7 ✗)
  B[1] = 8, 8-7 = 1 (不是质数 ✗)
  B[2] = 10, 10-7 = 3 (质数 ✓) → 输出 2

对于 A[2] = 12:
  B[3] = 13, 13-12 = 1 (不是质数 ✗)
  B[4] = 17, 17-12 = 5 (质数 ✓) → 输出 4

输出: [0, 2, 4]

解题思路

暴力法会超时,关键是先对 B 排序,再用二分和质数筛选表(Sieve of Eratosthenes)加速判断。最后 O(n log m) 复杂度能轻松通过所有大数据样例。

步骤 1:预处理质数表

def sieve_of_eratosthenes(max_val):
    """预处理质数判断表,O(max_val log log max_val)"""
    is_prime = [True] * (max_val + 1)
    is_prime[0] = is_prime[1] = False
    for i in range(2, int(max_val**0.5) + 1):
        if is_prime[i]:
            for j in range(i*i, max_val + 1, i):
                is_prime[j] = False
    return is_prime

步骤 2:二分查找 + 质数判断

import bisect

def solve(A, B):
    """
    对于每个 A[i],找到 B 中第一个满足条件的索引
    时间复杂度: O(n log m + max_val log log max_val)
    空间复杂度: O(max_val)
    """
    max_diff = max(B) - min(A)
    is_prime = sieve_of_eratosthenes(max_diff)
    
    result = []
    for a in A:
        # 二分找到 B 中第一个 > a 的位置
        start_idx = bisect.bisect_right(B, a)
        
        found = -1
        for j in range(start_idx, len(B)):
            diff = B[j] - a
            if diff > 0 and is_prime[diff]:
                found = j
                break
        
        result.append(found)
    
    return result

关键要点

  1. 质数预处理:使用 Sieve of Eratosthenes 将质数判断从 O(sqrt(n)) 降到 O(1)
  2. 二分查找:利用 B 数组已排序的特性,快速找到起始搜索位置
  3. 时间复杂度:O(n log m + max_val log log max_val),远优于暴力法的 O(n * m * sqrt(max_diff))

第二题:优化分组与动态规划

题目描述

题目给出一组任务难度值,需要把它们分配到若干服务器上,使”跨服务器延迟差异”最大化,但每台服务器至少要分到一个任务。

输入:

  • 任务难度值数组 tasks
  • 服务器数量 k

输出:

  • 最大化”跨服务器延迟差异”的分配方案

示例:

tasks = [1, 3, 5, 7, 9, 11]
k = 3

最优分配: [1,3,5], [7], [9,11]
服务器差异 = |max(9,11) - min(1,3,5)| = |11 - 1| = 10

解题思路

暴力枚举会爆炸,正确思路是先排序,然后利用前缀最小值后缀最大值数组,枚举中间分割点,动态维护三段区间的最大最小差值。代码实现时要格外注意边界条件(例如每组至少 1 个元素),否则容易错在 corner case。

步骤 1:排序 + 前缀/后缀数组

def solve(tasks, k):
    """
    将任务分配到 k 台服务器,最大化跨服务器延迟差异
    时间复杂度: O(n * k^2)
    空间复杂度: O(n)
    """
    tasks.sort()
    n = len(tasks)
    
    # 前缀最小值和后缀最大值
    prefix_min = [0] * n
    suffix_max = [0] * n
    
    prefix_min[0] = tasks[0]
    for i in range(1, n):
        prefix_min[i] = min(prefix_min[i-1], tasks[i])
    
    suffix_max[n-1] = tasks[n-1]
    for i in range(n-2, -1, -1):
        suffix_max[i] = max(suffix_max[i+1], tasks[i])
    
    # 枚举分割点
    max_diff = 0
    for i in range(k-1, n - (k-1)):
        # 第一段: [0, i]
        # 最后一段: [j, n-1]
        for j in range(i + 1, n - (k-2)):
            diff = suffix_max[j] - prefix_min[i]
            max_diff = max(max_diff, diff)
    
    return max_diff

步骤 2:优化分割点枚举

def solve_optimized(tasks, k):
    """
    优化版本:利用排序后的单调性
    时间复杂度: O(n * k)
    """
    tasks.sort()
    n = len(tasks)
    
    # 最优策略:将最小值放在一组,最大值放在另一组
    # 中间 k-2 组不影响最终结果
    if k >= 2:
        return tasks[-1] - tasks[0]
    else:
        return 0  # 只有一台服务器,差异为 0

关键要点

  1. 排序是关键:排序后最小值和最大值分别位于数组两端
  2. 前缀/后缀数组:快速计算任意区间的最小/最大值
  3. 边界条件:确保每组至少 1 个元素,避免索引越界

TL;DR

整体来看,Goldman Sachs 的题不追求奇技淫巧,而是考察是否能把数学规律转化为高效算法

建议提前熟练掌握的核心技巧

  • 二分查找 + 前缀后缀扫描
  • 排序 + 分段贪心
  • 基础数论判断(质数、GCD)

备考建议

  1. 写题时思路清晰、注释规范、输出正确即可
  2. 系统会即时判分
  3. 我们拿到 OA 结果 1 周后就收到了面试邀请

💡 需要面试辅导?

如果你正在准备 Goldman Sachs 或其他金融科技公司面试,我们的 SDE 面试辅导 可以帮你:

  • OA 刷题指导 — HackerRank 平台真题讲解
  • Mock Interview — 模拟真实 OA 环境
  • 1v1 个性化辅导 — 根据背景定制备考计划

👉 联系我们,获取你的专属面试辅导方案。

延伸阅读


💡 需要面试辅导?

如果你正在准备 Goldman Sachs、Wall Street 或科技公司的技术面试,我们的 SDE 面试辅导 可以帮你:

  • OA 刷题策略 — 高频题型 + 解题模板,帮你高效备战 Online Assessment
  • Mock Interview — 模拟真实面试环境,获得针对性反馈
  • 1v1 个性化指导 — 根据你的背景定制备考计划

👉 联系我们,获取你的专属面试辅导方案。


💡 需要面试辅导?

如果你正在准备 Goldman Sachs 或其他顶级金融机构的技术面试,我们的辅导团队可以帮你:

  • OA 刷题指导 — 针对 HackerRank 平台的高频题型和解题技巧
  • Mock Interview — 模拟真实面试环境,提升解题和表达能力
  • 1v1 个性化辅导 — 根据背景定制准备计划

👉 联系我们,获取你的专属面试辅导方案。


💡 需要面试辅导?

如果你正在准备 Goldman Sachs 或 Wall Street 其他金融机构的技术面试,我们的辅导团队可以帮你:

  • OA 刷题指导 — HackerRank 高频题型 + 解题策略
  • Mock Interview — 模拟真实 OA 环境
  • 1v1 个性化辅导 — 根据你的背景定制备考计划

👉 联系我们,获取你的专属面试辅导方案。


💡 需要面试辅导?

如果你正在准备 Goldman Sachs 或其他顶级金融/科技公司的技术面试,我们的 SDE 面试辅导 可以帮你:

  • OA 刷题指导 — 针对 HackerRank 平台的高频题型和解题技巧
  • Mock Interview — 模拟真实面试环境,提升实战能力
  • 1v1 个性化辅导 — 根据你的背景定制备考计划

👉 联系我们,获取你的专属面试辅导方案。

💡 需要面试辅导?

如果你正在准备技术面试,我们的 SDE 面试辅导 可以帮你:

  • 1v1 个性化辅导 — 根据你的背景定制备考计划
  • Mock Interview — 模拟真实面试环境,覆盖 Coding + System Design + Behavioral
  • 高频题库 — 针对性练习你目标公司的高频题目

👉 联系我们,获取你的专属面试辅导方案。

准备好拿下下一次面试了吗?

获取针对你的目标岗位和公司的个性化辅导方案。

联系我们