Google OA New Grad 面经|1.29 两题真题复盘与解题思路解析

64Times read
No Comments

最近连续刷了不少 OA,这场 Google 的整体体验还是一句话评价:题目数量少,但思考成本不低。
不是那种靠手速或者套路就能稳拿的 OA,尤其第一题,规则一多,稍微想歪就很容易走进死胡同。这次 OA 一共两道题,时间本身不算紧,但对思路的要求比较高,属于那种想对了就很顺,想歪了就一直卡着的类型。

第一题:棋子跳跃 + 硬币最大化

题目给了一条字符串作为棋盘,其中 T 表示棋子,C 表示硬币,. 表示空位。每个棋子只能向右移动,而且每次必须正好跳 3 个格子,可以连续跳多次,但不能落在已经有其他棋子的位置上。如果落在硬币上,就可以收集该硬币,每个硬币只能被收集一次,最终目标是最多能收集多少个硬币。

这题一开始很容易被带偏,比如试图把所有棋子统一规划、做全局最优匹配,甚至往 DP 上靠,但其实这些思路都会把问题复杂化。关键在于,每个棋子能到达的位置是完全确定的,只可能是当前位置往右的 i+3, i+6, i+9... 这些点。

一个比较稳的做法是从左到右扫描每一个棋子,按顺序处理。对于当前这个棋子,只在它能跳到的位置中寻找还没被使用的硬币,并且优先选择最靠左的那个。一旦匹配成功,就认为这个棋子完成任务,不再继续向右跳,同时把对应的硬币标记为已使用。

这样做的直觉在于:越早、越靠左地使用硬币,越能给后面的棋子留下更多可用空间。这是一个很典型的贪心场景,用局部最优来避免后续冲突。实际写代码时,只要把「棋子占用」和「硬币是否已被收集」这两个状态处理清楚,整体逻辑会非常顺。

Google OA 真题

第二题:共享数字的最大子集

第二题整体就轻松很多,题目给了一个数组,里面都是 10 到 99 的两位数。你可以从中选出一组数字,要求这组里的所有数至少共享一个相同的数字(0 到 9 中的任意一个),问最多能选多少个。

乍一看像是在考子集或者组合,但其实条件非常单一:只要存在某一个数字 d,使得选中的所有数都包含这个 d,就满足要求。换句话说,问题可以直接转化成:对每个数字 0–9,统计数组中有多少个数包含它。

具体做法就是枚举 0 到 9,每次扫描一遍数组,统计包含当前数字的元素数量,最后取一个最大值即可。只要想清楚「共享一个数字」等价于「围绕某个固定数字做筛选」,这题基本就是一道纯计数题。

总结感受

这次 Google OA 给人的感觉很典型:题目不多,但每一道都要求你对问题本质判断得足够快。第一题更偏向规则理解和贪心策略是否选对,第二题则是考你能不能迅速把抽象条件拆成可枚举、可统计的形式。

整体难度不算离谱,但绝对不是那种靠刷题数量就能稳过的 OA。如果最近在准备 Google 或其他大厂的在线测评,这类「规则多、但解法其实不复杂」的题型,真的值得多刻意练几次,避免在考场上被自己绕进去。

真实场景下,很多人缺的不是刷题

针对这种 OA / Live Coding 场景,Programhelp 提供的实战远程辅助支持,很多同学真正需要的,其实不是多刷几道题,而是在最容易想歪的那 5 分钟里有人把你拽回来。如果你现在正卡在大厂 OA、VO 或现场 coding 的关键阶段,OA无痕辅助 在实战中确实能明显降低翻车概率,至少不会输在想复杂了这种最可惜的地方。

author avatar
Jory Wang Amazon资深软件开发工程师
Amazon 资深工程师,专注 基础设施核心系统研发,在系统可扩展性、可靠性及成本优化方面具备丰富实战经验。 目前聚焦 FAANG SDE 面试辅导,一年内助力 30+ 位候选人成功斩获 L5 / L6 Offer。
End of text
 0