最近有同学在 Meta 的算法面试中遇到一道非常典型的 Grid + Graph Connectivity 题。题面看起来像地形图,其实本质还是 图连通性 + 单调性搜索。
下面是当时面试中给出的题目原文。
Find the minimum water height that disconnects the corners of a contour map.You're given a grid of land heights. For example:S 5 4 5 5
4 2 5 1 1
5 5 2 1 5
2 3 2 4 4
5 4 5 5 EIn the upper-left corner is a "start" cell with infinite height, and in the
bottom-right corner is an "end" cell with similarly infinite height.The goal is to find the minimum water level that blocks all paths between
start and end.You can move up/down/left/right between adjacent cells, but cannot traverse
cells that have a height less than or equal to the current water level.
题目还给出了一个水位上升的示例:
当水位为 1 时:
.....
...XX
...X.
.....
.....
当水位为 2 时:
.....
.X.XX
..XX.
.X.X.
.....
当水位为 3 时:
.....
.X.XX
..XX.
XXX..
.....
当水位达到 3 时,Start 和 End 之间已经不存在任何路径。
因此答案是:
3
这位同学回忆,面试官给完题之后,并没有直接要求写代码,而是先问:
“你会怎么建模这个问题?”
候选人先解释自己的理解:
这其实可以看作一个 二维图(grid graph)。
每个格子是一个节点,相邻四个方向可以连边。
但水位会影响节点是否可用:
如果某个格子的高度 ≤ 当前水位,那么这个节点就相当于被淹没,无法经过。
所以在某个固定水位 h 下,我们可以问一个问题:
Start 是否还能走到 End?
如果还能走到,说明水位还不够高。
如果走不到,说明水位已经成功把两点隔开。
面试中最关键的一步,是观察到一个性质:
随着水位升高,可走的格子只会 越来越少。
也就是说:
- 如果在水位
h时还能到达终点 - 那么在更低的水位一定也能到达
反过来:
- 一旦在某个水位
h无法到达 - 更高的水位也一定无法到达
这意味着答案具有 单调性。
因此我们可以把问题转化为:
找到最小的水位 h,使得 Start 无法到达 End。
通常比较标准的思路是两层结构:
第一层:Binary Search on Water Level
水位范围可以从:
0 ~ max(grid)
通过二分搜索一个候选水位 mid。
第二层:BFS / DFS 判断连通性
对于某个水位 mid:
- 从 Start 开始 BFS / DFS
- 只能走高度 > mid 的格子
- 如果最终能到达 End → 说明还没断开
- 如果到不了 → 说明这个水位已经可以断开
通过二分不断缩小范围,最终找到最小水位。
Meta 的面试官继续追问一些优化问题,例如:
1️⃣ 如果 grid 非常大怎么办?
候选人可以讨论:
- Union-Find
- 按高度排序逐步“淹没”
2️⃣ 是否可以不用 Binary Search?
有些候选人会想到:
反过来思考 最小瓶颈路径(minimax path)
或者用 priority queue + Dijkstra 思想。
不过在面试中,Binary Search + BFS 已经是非常标准的解法。
在我们 CSOAHELP 面试辅助服务中,会提供:
- 实时 VO 面试协助
- 高频真题库整理
- 题目思路提示
- 面试系统设计八股整理
- 面试结束后的详细复盘
已经帮助很多同学顺利拿到:
- Meta
- TikTok
- Snowflake
- DoorDash
等公司的 Offer。
如果你最近有 VO 面试,提前准备这些 真实题型和思路,会非常关键。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

