Google SWE OA 面经|路由器连通、树形岛屿与边界测试

作者:

编辑于:

July 17, 2026

阅读时长:

1 minute read
Google OA 面经配图

这次 Google SWE OA 的节奏很紧,两道 Coding 题连续出现,先把题意和输入规模问清楚会省掉很多返工。第一题看的是图连通建模,第二题把“岛屿”放进树结构里,关键不在于背模板,而在于把状态定义讲明白。

第一题:路由器覆盖范围内的消息转发

Question description

给定若干路由器的二维坐标和通信半径。两台路由器距离不超过半径时可以直接转发消息。输入起点与终点,判断消息能否经过若干跳送达,并返回最少跳数;坐标数量可达 10^5。

Problem-solving ideas

先确认半径是全局常量还是每台设备单独给出。全局半径下,不能直接枚举任意两点建图。把平面按边长为半径的网格分桶,只检查当前桶及相邻八个桶中的候选点,再用 BFS 维护访问状态和层数。距离判断用平方距离,避免开方误差。起点等于终点、坐标重合、半径为零和孤立节点都要单独覆盖。

Complexity:分桶分布均匀时,时间接近 O(n + e),空间 O(n)。

第二题:树形结构里的二值岛屿

Question description

给一棵二叉树,每个节点值为 0 或 1。值为 1 的相邻父子节点属于同一座岛屿,要求统计岛屿个数,并返回每座岛屿的节点数。追问要求不递归实现,防止深树触发调用栈限制。

Problem-solving ideas

从根节点做显式栈 DFS。遇到一个值为 1 且父节点为空或为 0 的节点时,岛屿计数加一,并启动一次局部遍历统计该连通块规模。也可以在单次遍历里给状态带上“父节点是否为 1”,这样无需二次扫描。迭代栈里保存节点和父状态;空节点直接跳过。测试时重点检查根节点为 1、左右子树各自成岛、整棵树全为 1,以及只有叶子为 1 的情况。

Complexity:时间 O(n),额外空间 O(h),h 为树高。

做题过程里的两个提醒

Google 的技术筛选更看重推导过程是否能落到可运行代码。先说清楚图的节点和边,再写 BFS 队列;树题则先定义“一个岛开始”的条件。看到第二题时,可以顺手用一组四层树画出父状态的变化,能减少把同一座岛重复计数的错误。想补足这类空间连通建模,可以看看 Google Waterloo SWE 候选人分享的 OA 与面试流程.

FAQ

Google SWE OA 先练什么更有效?

优先练图遍历、树遍历、区间处理和能写完整测试的 Medium 难度题。每题都留出最后五分钟检查空输入、重复数据和边界条件。

图题写 BFS 还是 DFS?

要求最少跳数时直接选 BFS。若题目只问是否可达,DFS 与 BFS 都能完成,但 BFS 的层数语义更容易扩展到最少跳数追问。

参考来源

关于 CSOFFERPREP

进 VO 之前,可以找 CSOFFERPREP 做实时面试助攻和备考辅导。导师来自一线大厂资深工程师和面试官,对 Google 这类注重工程文化的公司的面试套路很熟悉。无论是 OA辅助、OA 辅导、VO 辅助、VO 模拟面试、VO 辅助还是系统设计辅助,都可以获得更有针对性的准备方案:CSOFFERPREP · 服务详情