← 返回博客列表 Meta SDE VO 真题:Toeplitz 矩阵判定 + 多边形内外判定
Meta

Meta SDE VO 真题:Toeplitz 矩阵判定 + 多边形内外判定

2026-06-15

Meta 的 SDE VO 一轮约 45 分钟,常常一道开胃菜 + 一道硬菜。这篇按 oavoservice 学员的一轮复盘,面试官是常驻伦敦办公室的资深工程师,节奏不急、很看你解释思路的清晰度。两道题:开胃菜判定 Toeplitz 矩阵,主菜是 0/1 矩阵里的多边形内外判定——后者如果没专门刷过计算几何,临场挺容易卡住。文末附 VO辅助 / VO代面 的对接路径,给正在大厂求职、查漏补缺的同学一个实战参考。


一、Meta SDE VO 概览

维度 详情
形式 远程视频 / onsite(Coderpad / 共享编辑器)
单轮 约 45 分钟,1–2 道编程题
语言 自选,Python 最常见
考察 算法功底、几何/数学直觉、dry run、口头表达
风格 面试官常驻不同办公室(含欧洲),重视思路解释胜过单纯 AC

Meta 的编程轮不只看你能不能写出来,更看你讲不讲得清。面试官会让你对着具体 case 手动走一遍算法(dry run),最后还要给出时间复杂度。能边写边说清每一步的人,明显占优。

二、题一(开胃菜):判定 Toeplitz 矩阵

题目

给一个矩阵,判断它是不是 Toeplitz 矩阵——即每条从左上到右下的对角线上的元素全部相等。

思路

不用想太多,这题的理论下界就是把矩阵扫一遍。对每个非首行首列的元素 matrix[i][j],只要它等于左上角的邻居 matrix[i-1][j-1],整个矩阵就是 Toeplitz。先把这个判定条件讲清楚,再实现遍历就过了。

def is_toeplitz(matrix):
    rows, cols = len(matrix), len(matrix[0])
    for i in range(1, rows):
        for j in range(1, cols):
            if matrix[i][j] != matrix[i - 1][j - 1]:
                return False
    return True
print(is_toeplitz([[1, 2, 3],
                   [4, 1, 2],
                   [5, 4, 1]]))   # True

时间复杂度:O(m·n)(每个元素看一次,已是下界)。空间复杂度:O(1)。

三、题二(主菜):矩阵中点的多边形内外判定

题目

给一个由 01 组成的矩阵,其中 1 表示多边形的边。再给一个 0 的坐标,判断这个点是在多边形内部还是外部

拆题:先选对算法,再讲得清

这道题没专门刷过计算几何的话挺难的,刷题时也很少碰到扫描线。一开始可能会想到扫描线算法,但它对没接触过的人理解成本高、临场也不好解释。

更稳的选择是射线法(ray casting / 奇偶规则):从待测点向某个固定方向(比如向右)引一条射线,统计它穿过多边形边界的次数。穿越奇数次 → 在内部;偶数次 → 在外部。这个直觉非常好讲,面试官和你都不容易绕晕。

在这个离散的 0/1 矩阵里,做了一个简化:从该点所在行向右走,数沿途连续 1 段(每段算一次边的穿越)的个数,按奇偶判定。

def is_inside(grid, r, c):
    cols = len(grid[0])
    crossings = 0
    j = c + 1
    # 从 (r, c) 向右发射线,统计穿过的边界段数
    while j < cols:
        if grid[r][j] == 1:
            crossings += 1
            while j < cols and grid[r][j] == 1:   # 跳过整段连续的边
                j += 1
        else:
            j += 1
    return crossings % 2 == 1                       # 奇数 → 内部
grid = [
    [0, 0, 0, 0, 0],
    [0, 1, 1, 1, 0],
    [0, 1, 0, 1, 0],
    [0, 1, 1, 1, 0],
    [0, 0, 0, 0, 0],
]
print(is_inside(grid, 2, 2))   # True,(2,2) 在方框内部

讲完思路后,面试官给了几个 case,对着算法 dry run 一遍,确认奇偶规则在每个 case 上都对,最后报复杂度。一遍过。

时间复杂度:O(cols)(单条射线扫一行)。空间复杂度:O(1)。

注:连续 1 段当一次穿越是离散网格的实用简化;真正鲁棒的射线法还要处理射线正好擦过顶点的退化情况。面试时把这层假设讲清楚,比闷头写更重要。

四、临场提醒


FAQ

Q1:Meta SDE VO 一轮考几道题?

编程轮通常一轮约 45 分钟、1–2 道题,难度集中在 LeetCode 中等、偶有中上。不同轮面试官可能来自不同办公室(含欧洲),普遍重视思路解释和 dry run,而不只是 AC。

Q2:多边形内外判定为什么用射线法而不是扫描线?

射线法(奇偶规则)直觉清楚、好口头解释:从点引一条射线,数穿过边界的次数,奇数在内、偶数在外。扫描线虽强但理解和讲解成本高,临场容易绕晕。能讲清的解法在面试里更占优。

Q3:Toeplitz 矩阵判定有没有更优解?

没有更低的时间下界——必须把每个元素至少看一次,所以 O(m·n) 已是最优;空间可以做到 O(1)。判定条件就是每个元素等于它左上方的邻居。

Q4:计算几何这类盲区怎么准备?

按专题查漏补缺:射线法、凸包、线段相交、扫描线各做几道并讲清思路。需要按 Meta 题型做限时 mock、逐题讲解或 VO辅助 / VO代面 全程对接,可以走下面的路径定制。


正在准备 Meta SDE VO?

Meta 编程轮看的是思路表达和盲区覆盖。oavoservice 提供 Meta 全流程陪练:矩阵 / 计算几何 / 射线法 / 图与树高频题限时模拟,dry run 与口头表达逐题打磨,按大厂岗题型做预测。教练含大厂背景资深工程师,支持 VO辅助 / VO代面 全程对接。

立即添加微信 Coding0201获取 Meta 真题与陪练

联系方式