高盛 (Goldman Sachs) OA 在线笔试真题解析 — HackerRank 120 分钟完整面经
Goldman Sachs Engineering OA 真题详解:HackerRank 120 分钟两道算法题完整复盘,多序列匹配 + 搜索优化、优化分组与动态规划思路
高盛 (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
关键要点
- 质数预处理:使用 Sieve of Eratosthenes 将质数判断从 O(sqrt(n)) 降到 O(1)
- 二分查找:利用 B 数组已排序的特性,快速找到起始搜索位置
- 时间复杂度: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 个元素,避免索引越界
TL;DR
整体来看,Goldman Sachs 的题不追求奇技淫巧,而是考察是否能把数学规律转化为高效算法。
建议提前熟练掌握的核心技巧
- 二分查找 + 前缀后缀扫描
- 排序 + 分段贪心
- 基础数论判断(质数、GCD)
备考建议
- 写题时思路清晰、注释规范、输出正确即可
- 系统会即时判分
- 我们拿到 OA 结果 1 周后就收到了面试邀请
💡 需要面试辅导?
如果你正在准备 Goldman Sachs 或其他金融科技公司面试,我们的 SDE 面试辅导 可以帮你:
- OA 刷题指导 — HackerRank 平台真题讲解
- Mock Interview — 模拟真实 OA 环境
- 1v1 个性化辅导 — 根据背景定制备考计划
👉 联系我们,获取你的专属面试辅导方案。
延伸阅读
- HackerRank OA 常见问题与解题技巧 — HackerRank 平台刷题策略与高频题型
- SDE 面试准备指南 — 完整的 SDE 面试准备方法论
💡 需要面试辅导?
如果你正在准备 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
- 高频题库 — 针对性练习你目标公司的高频题目
👉 联系我们,获取你的专属面试辅导方案。