← 返回部落格列表 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 真題與陪練

聯絡方式