← 返回部落格列表 Snowflake Coding 高頻題全解析:陣列 + 字串 + 圖 + 資料流
Snowflake

Snowflake Coding 高頻題全解析:陣列 + 字串 + 圖 + 資料流

2026-06-07

Snowflake 的 coding 面試很有特色:不追求極端冷門題,也不停留在簡單套路。出題往往來自常見的 LeetCode 中等題,但考察深度很高——面試官更看重你能否在短時間內給出最佳解,並清楚解釋「為什麼這是最佳」。只靠暴力解哪怕跑通測試用例,往往也拿不到高分。

這篇文章把 Snowflake 高頻題歸納成四大模組:陣列、字串、圖、資料流,逐題給出 Python 最佳解、複雜度,以及面試官最愛追問的「為什麼」解釋邏輯。

Snowflake Coding 面試速查表

維度 詳情
平台 CoderPad / 自帶 IDE(VO 階段)
時長 單輪 45 分鐘,1-2 題
難度 LeetCode 中等為主,偏上
考察重點 最佳解 + 複雜度解釋 + 程式碼健壯性
高頻模組 陣列、字串滑窗、圖搜尋、堆積/資料流

題型一:陣列——最大容器面積(雙指標)

題目描述

給定 N 條垂直線的高度,選兩條與 x 軸圍成容器,求能容納的最大水量。

解題思路

暴力枚舉所有線對是 O(n²),真實場景不可接受。Snowflake 希望你立刻想到雙指標:左右指標向中間收縮,每次移動較矮的一側。

Python 解法

def max_area(height):
    left, right = 0, len(height) - 1
    best = 0
    while left < right:
        h = min(height[left], height[right])
        best = max(best, h * (right - left))
        # 移動較矮一側,因為面積受限於較矮的線
        if height[left] < height[right]:
            left += 1
        else:
            right -= 1
    return best

為什麼最佳:移動較高的一側不可能讓面積變大(寬度減小、高度仍受限於矮側),所以只需單向收縮,O(n) 一遍掃描即可。

時間複雜度:O(n) 空間複雜度:O(1)

題型二:字串——最小覆蓋子字串(滑動視窗)

題目描述

給定字串 s 和 t,找出 s 中包含 t 所有字元的最短子字串。

解題思路

滑動視窗 + 雜湊計數。右指標擴張直到覆蓋 t,再收縮左指標求最短。關鍵在於正確維護視窗邊界,避免 off-by-one。

Python 解法

from collections import Counter

def min_window(s, t):
    need = Counter(t)
    missing = len(t)
    left = start = 0
    end = float('inf')
    for right, ch in enumerate(s):
        if need[ch] > 0:
            missing -= 1
        need[ch] -= 1
        while missing == 0:                 # 視窗已覆蓋 t
            if right - left < end - start:
                start, end = left, right
            need[s[left]] += 1
            if need[s[left]] > 0:
                missing += 1
            left += 1
    return "" if end == float('inf') else s[start:end + 1]

為什麼用 Counter 而非定長陣列:t 可能含任意字元,Counter 更通用;若限定小寫字母,定長陣列常數更小。面試時主動說明這個取捨是加分點。

時間複雜度:O(|s| + |t|) 空間複雜度:O(|t|)

題型三:圖——課程表(拓撲排序偵測環)

題目描述

給定課程數和先修依賴 prerequisites,判斷能否修完所有課程(即依賴圖是否有環)。

解題思路

Snowflake 的核心系統有複雜分散式依賴,圖論題高頻。用 Kahn 拓撲排序:入度為 0 的節點逐層出佇列,最終出佇列數 < 課程數即有環。

Python 解法

from collections import deque, defaultdict

def can_finish(num_courses, prerequisites):
    graph = defaultdict(list)
    indegree = [0] * num_courses
    for course, pre in prerequisites:
        graph[pre].append(course)
        indegree[course] += 1
    queue = deque(i for i in range(num_courses) if indegree[i] == 0)
    visited = 0
    while queue:
        node = queue.popleft()
        visited += 1
        for nxt in graph[node]:
            indegree[nxt] -= 1
            if indegree[nxt] == 0:
                queue.append(nxt)
    return visited == num_courses

為什麼 Kahn 而非 DFS:兩者都可,但 Kahn 用入度天然避免遞迴堆疊深度問題,且更易解釋「為什麼能偵測環」——無法清空佇列就說明存在循環依賴。

時間複雜度:O(V + E) 空間複雜度:O(V + E)

題型四:資料流——求中位數(雙堆積)

題目描述

設計資料結構,支援持續 addNum,隨時返回當前所有數的中位數。

解題思路

與 Snowflake 業務最接近的就是資料流題。用雙堆積:大頂堆積存較小一半,小頂堆積存較大一半,保持兩堆大小平衡。

Python 解法

import heapq

class MedianFinder:
    def __init__(self):
        self.lo = []  # 大頂堆積(存負值),較小一半
        self.hi = []  # 小頂堆積,較大一半

    def add_num(self, num):
        heapq.heappush(self.lo, -num)
        heapq.heappush(self.hi, -heapq.heappop(self.lo))
        if len(self.hi) > len(self.lo):       # 保持 lo 不少於 hi
            heapq.heappush(self.lo, -heapq.heappop(self.hi))

    def find_median(self):
        if len(self.lo) > len(self.hi):
            return -self.lo[0]
        return (-self.lo[0] + self.hi[0]) / 2

面試官追問:如果資料流無法全部放進記憶體怎麼辦?優秀回答會談到外部排序、分桶統計,甚至 t-digest 等近似演算法。

時間複雜度:add O(log n)、查詢 O(1) 空間複雜度:O(n)

備考策略

能力 重點 推薦 LeetCode
雙指標 / 前綴和 單向收縮證明 11, 42, 560
滑動視窗 邊界維護 76, 3, 438
圖搜尋 / 拓撲 環偵測 207, 210, 200
堆積 / 資料流 雙堆積平衡 295, 215, 347

核心不在寫出答案,而在清晰解釋思路、保證健壯性、並展示資料規模擴展後的應對方案


FAQ

Q1:Snowflake 的 coding 題難嗎?和 LeetCode 比是什麼水平? 以 LeetCode 中等偏上為主,很少出冷門題。難點不在題目本身,而在面試官要求你立刻給最佳解並解釋為什麼最佳,暴力解通過測試也拿不到高分。

Q2:Snowflake 面試用什麼平台?時長多久? VO 階段多用 CoderPad 或自帶 IDE,單輪約 45 分鐘,通常 1-2 題。重點是邊寫邊講清思路與複雜度。

Q3:Snowflake 最常考哪些題型? 陣列(雙指標/前綴和)、字串(滑動視窗)、圖(DFS/BFS/拓撲排序)、堆積與資料流(中位數/Top-K)四大模組覆蓋了絕大多數高頻題。

Q4:資料流題被追問「記憶體放不下」怎麼答? 談外部排序、分桶處理與近似演算法(如 t-digest 估中位數、Count-Min Sketch 估頻率),並說明精度與記憶體的取捨,這正是 Snowflake 想看的工程深度。

Q5:如何高效準備 Snowflake coding 面試? 以 LeetCode 高頻中等題為基礎,重點練滑動視窗、單調堆疊、圖搜尋、堆積四類,並刻意訓練「邊寫邊解釋為什麼最佳」的表達。


正在準備 Snowflake 面試?

如果你能寫出答案但講不清「為什麼最佳」,或想在 VO 階段有人幫你做題型拆解與表達陪練,可以聊聊完整的 OA輔助 / VO輔助 方案——從最佳解推導到複雜度論證,全程支援。


聯絡方式

需要面試真題與客製備戰計畫?立刻聯絡微信 Coding0201獲取真題

Email: [email protected] Telegram: @OAVOProxy