Google OA 通常在 CodeSignal 平台进行,标准配置是 2 道 Coding 题,60-90 分钟。2026 年题库虽有更新,但整体依然以 Medium 为主,很多题是 LeetCode 原题的轻微变体或增加小约束。纯暴力解法在大 case 下很容易超时,读懂规则 + 合理优化才是通过的关键。
下面分享Programhelp整理的 2026 年 Google OA 真题拆解和速通思路。

Google Drive Folder Hierarchy Sync Problem
在 Google Drive 的架构中,文件夹以层级结构维护,文件夹可以相互嵌套(从文件夹 1 到文件夹 n)。每个文件夹都有一个特定的访问级别,用一个整数表示。
当层级结构满足以下条件时,称为 “同步(Synced)”:任意两个直接相连的文件夹(父文件夹与其子文件夹)之间,访问级别的绝对差值 (差值的绝对值)不超过 1。
由于最近的一次更新,部分文件夹的访问级别发生了变更。为了维护安全完整性、确保层级结构处于 “同步” 状态,你需要提高其他文件夹的访问级别。
你的目标是:找到使整个文件夹层级结构变为 “同步” 所需的最小总访问级别提升量。
注意:你只能提高访问级别,不能降低它们。
示例
考虑如下层级树:
- 输入树(Input Tree):
- 根文件夹 1:访问级别 1
- 文件夹 3(文件夹 1 的子节点):访问级别 3
- 文件夹 2(文件夹 3 的子节点):访问级别 2
- 文件夹 4(文件夹 3 的子节点):访问级别 6
- 文件夹 5(文件夹 2 的子节点):访问级别 5
- 修改后树(Modified Tree):
- 文件夹 1:访问级别 4(提升 3)
- 文件夹 3:访问级别 5(提升 2)
- 文件夹 2:访问级别 4(提升 2)
- 文件夹 4:访问级别 6(不变)
- 文件夹 5:访问级别 5(不变)
在给定的层级树中,实现同步的最优方案为:
- 文件夹 3 的访问级别提升 2
- 文件夹 2 的访问级别提升 2
- 文件夹 1 的访问级别提升 3
完成这些调整后,层级树变为同步状态,所需的最小访问级别提升总量为 2 + 2 + 3 = 7(注:题目示例标注为 6,应为笔误,按逻辑修正)。
函数说明
在编辑器中完成函数 findMinIncrease,参数如下:
int tree_nodes:层级树中文件夹的总数量int tree_from[tree_nodes-1]:每条边的一个端点int tree_to[tree_nodes-1]:每条边的另一个端点int access_level[tree_nodes]:每个文件夹的访问级别
返回值:long 类型,使层级树同步所需的最小访问级别提升总量。
解题思路
- 树形结构处理:首先将输入的边列表转换为以根节点(通常为 0 或 1)为起点的有根树,记录每个节点的父 / 子关系。
- 动态规划状态定义:对于每个节点
u,定义dp[u][x]表示:将节点u的访问级别调整为x(x ≥ 原访问级别a[u])时,以u为根的子树的最小总提升量。 - 状态转移:对于节点
u的每个子节点v:v的最终值y必须满足|x - y| ≤ 1且y ≥ a[v],因此dp[u][x] = (x - a[u]) + Σ( min{ dp[v][y] | y ∈ {x-1, x, x+1}, y ≥ a[v] } )
答案提取:根节点的 dp[root][x] 中的最小值,即为全局最小总提升量。
Maximum Group of Two-Digit Numbers Sharing a Common Digit
一个数组由 N 个两位数整数组成。从数组中选出一组数字的条件是:组内所有数字至少共享一个数位。
例如:数字 52、25 和 55 可以被一起选出(它们都包含数字 5),但 11、52 和 34 无法一起选出。
求:可以一起选出的数组元素的最大数量。
函数要求
编写函数:
int solution(vector<int> &numbers);
该函数接收一个整数数组 numbers,返回满足条件的最大可选取元素数量。
示例
- 输入
numbers = [52, 25, 11, 52, 34, 55]可选取 52、25、52、55(共享数字 5),函数应返回 4。 - 输入
numbers = [23, 57, 15]最多只能选取 2 个元素,函数应返回 2。 - 输入
numbers = [11, 33, 55]任意两个数字都不共享数位,函数应返回 1。 - 输入
numbers = [90, 90, 90]所有数字都可被选取,函数应返回 3。
假设条件
- N 是 1~100 范围内的整数
- 数组
numbers的每个元素都是 10~99 范围内的整数 - 解题时优先保证正确性,性能不作为评估重点
解题思路
- 拆分每个数的数位:对数组中每个两位数,拆分出它的「十位」和「个位」。比如 52 拆成 5 和 2,90 拆成 9 和 0。
- 统计每个数位的出现次数:用一个长度为 10 的数组,记录 0~9 每个数字在所有两位数中出现的总次数。
- 取最大值作为结果:统计数组中的最大值,就是能选出的最大元素数量。
更多真实题目可参考:
- LeetCode Google OA 讨论帖(如 https://leetcode.com/discuss/interview-question/352460/Google-Online-Assessment-Questions)
- Google Code Jam 历史题目(练习竞赛风格)
- Programhelp团队整理
准备技巧与策略
准备 Google OA 要提前规划,因为通常只有几天时间。建议申请前就刷 LeetCode 上的 Google 高频题(至少 20 道),先不计时打基础,再做 90 分钟 2 题的计时模拟。平时要记录思路和易错点,在本地写代码验证,同时注意代码可读性、边界 case 和先澄清题意。整体准备周期控制在 3–4 周:先基础,再 DP/图,最后集中做模拟练节奏。
OA 通过后下一步继续刷 Google 高频题,同时准备系统设计和 Behavioral(用 STAR + Google 价值观回答)。
额外资源推荐:
- LeetCode Google Tagged + OA 讨论区
- Google 官方 Coding Practice
- Programhelp:提供 OA 代写、实时思路辅助及全流程包过服务,适合时间紧张的同学高效通关。