← 返回部落格列表 Snowflake Online Assessment 三題全解:最長連續序列 + 字母異位詞 + 矩陣旋轉
Snowflake

Snowflake Online Assessment 三題全解:最長連續序列 + 字母異位詞 + 矩陣旋轉

2026-05-31

Snowflake 的 OA 90 分鐘、3 道題,沒有性格題,全部用程式碼說話。題型乍看都是 LeetCode Medium,但 Snowflake 的 hidden test 會同時考察複雜度上限矩陣 in-place 限制輸入輸出格式——這三點沒把握住,全 AC 也會丟分。這篇文章把三道高頻經典題:Longest Consecutive Sequence、Group Anagrams、Rotate Image,按「思路 + 完整程式碼 + 邊界踩坑」給出實戰版。這是 Unequal Elements + String Search 深挖版 的姐妹篇。

OA 平台特徵速讀

維度 Snowflake OA
時長 約 90 min
題量 3 道 coding
平台 HackerRank(自有題庫 + 共享 Databricks/Palantir 部分題)
評分 每題獨立打分 + hidden case 隱性扣分
通過線 估約 75% AC + 2 題 100% AC
Cutoff 風格 重「正確性」輕「速度」

題目一:Longest Consecutive Sequence(O(n) 嚴格要求)

題面:給定無序整數陣列,回傳最長連續序列的長度。要求 O(n) 時間複雜度。

input  = [100, 4, 200, 1, 3, 2]
output = 4   # [1, 2, 3, 4]

關鍵思路:HashSet + 起點判定

錯的做法:先 sort 再掃描。複雜度 O(n log n),會被 hidden test 直接 TLE。

正確做法:用 set 存所有元素,對每個 x只在 x-1 不在 set 時才向上擴展——這保證每段連續序列只被「頭節點」啟動一次,總時間 O(n)。

def longest_consecutive(nums: list[int]) -> int:
    s = set(nums)
    longest = 0
    for x in s:
        if x - 1 not in s:           # x 是某段連續序列的起點
            curr = x
            length = 1
            while curr + 1 in s:
                curr += 1
                length += 1
            longest = max(longest, length)
    return longest

複雜度:O(n)。邊界:空陣列回傳 0;含重複值時 set() 自動去重。

Hidden test 踩坑

題目二:Group Anagrams(用計數 key 替代排序)

題面:給定字串陣列,把字母異位詞歸為一組回傳。

input  = ["eat","tea","tan","ate","nat","bat"]
output = [["eat","tea","ate"], ["tan","nat"], ["bat"]]

關鍵思路:構造 key

最直接:key = "".join(sorted(s))。但 sorted 是 O(L log L),n 個字串總 O(n·L·log L)。

更優:26 長度的字元計數陣列當 key(tuple 化方便 hash)。每個字串 O(L) 構造 key,總 O(n·L)。

from collections import defaultdict

def group_anagrams(strs: list[str]) -> list[list[str]]:
    groups = defaultdict(list)
    for s in strs:
        cnt = [0] * 26
        for ch in s:
            cnt[ord(ch) - ord('a')] += 1
        groups[tuple(cnt)].append(s)
    return list(groups.values())

複雜度:O(n·L)。

Hidden test 踩坑

題目三:Rotate Image(in-place 90° 順時針)

題面:給定 n×n 矩陣,原地旋轉 90° 順時針。禁止 O(n²) 額外空間。

input  = [[1,2,3],
          [4,5,6],
          [7,8,9]]

output = [[7,4,1],
          [8,5,2],
          [9,6,3]]

關鍵思路:轉置 + 每行翻轉

兩步走,每步 O(n²)、O(1) 額外空間:

  1. 轉置(沿主對角線翻折):matrix[i][j] ↔ matrix[j][i]
  2. 每行翻轉row[::-1]
def rotate(matrix: list[list[int]]) -> None:
    n = len(matrix)
    # Step 1: transpose
    for i in range(n):
        for j in range(i + 1, n):
            matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
    # Step 2: reverse each row
    for row in matrix:
        row.reverse()

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

Hidden test 踩坑

三題對比:核心考點矩陣

題目 核心考點 時間複雜度 空間限制
Longest Consecutive HashSet 起點判定 O(n) O(n)
Group Anagrams 計數 key 替代排序 O(n·L) O(n·L)
Rotate Image 轉置 + 行翻轉 in-place O(n²) O(1)

Snowflake 的 hidden test 在每道題上都明確卡了複雜度上限(O(n) 不能寫 O(n log n))或空間限制(O(1) 不能臨時開新矩陣)——這是與 LeetCode 提交不一樣的地方。

OA 通關節奏(90 分鐘)

00:00 - 00:05  快速讀完 3 題
00:05 - 00:30  Q1:HashSet → 100% AC
00:30 - 00:55  Q2:字元計數 key → 100% AC
00:55 - 01:20  Q3:in-place 旋轉 → 100% AC
01:20 - 01:30  跑邊界(空 / 單元素 / 大輸入),逐題再 submit 一次

節奏建議:每道題留 5 分鐘邊界掃描,比一開始就追求 100% 完美更穩。Snowflake 評分對最終提交版本生效,多次提交不扣分。

與 Unequal Elements / String Search 的題型橫向對比

維度 本文三題 Unequal / String Search
難度 LC Medium LC Medium-Hard
演算法工具箱 HashSet / Counter / 轉置 滑動視窗 / 二分答案
解釋要求 中等(說複雜度即可) 高(需證明單調性 / 壓縮思路)
Hidden test 嚴苛度

如果你抽到的是本文三道經典,一般做完時間還會剩 20+ 分鐘,可以多花時間在邊界。如果抽到 Unequal / String Search,時間會非常緊。

OA 輔助怎麼對接 Snowflake

OA 輔助 / OA代面 的標準節奏:

  1. 題庫識別:傳邀請郵件截圖,5 分鐘內判定是「經典三題」還是「真題級兩題」類型
  2. 限時 mock:按 90 分鐘節奏練,重點是 in-place / O(n) 的限制感
  3. 現場 cue:OA 當天 reviewer 後台同步推骨架程式碼 + 邊界提示
  4. 覆盤:提交後 30 分鐘內回放,整理面試官常追問點
  5. Phone screen 銜接:OA 通過後口頭講解模板(HashSet 單調性、in-place 步驟拆解)

FAQ

Q1: 我可以提交多少次? A: 不限次數。Snowflake 評分以最後一次提交為準,所以建議每題做完先 submit 一次保底,再優化。

Q2: 沒要求 O(n) 的題用 O(n log n) 行不行? A: 行,但 Group Anagrams 用 sorted 寫也能過。Longest Consecutive 必須 O(n),hidden case 會 TLE 拒絕 O(n log n)。

Q3: in-place 旋轉能用 numpy.rot90 嗎? A: 不行。Snowflake 平台預設停用第三方加速函式庫。必須手寫轉置 + 翻轉。

Q4: 三道題做不完會被秒拒嗎? A: 不一定。如果 Q1+Q2 全 AC + Q3 拿部分 case,仍有機率進 phone screen。但 Q1 沒 AC 幾乎必拒。

Q5: OA 後多久能進 onsite? A: 一般 OA 通過 → 1 週內 phone screen → 2-3 週內 onsite。整體 4-5 週完成全流程。

寫在最後

Snowflake 這三道題如果在 LeetCode 上單獨刷,平均 30 分鐘一題。但 OA 場景裡同時考察複雜度敏感度 + 邊界掃描 + 提交節奏,這是 Snowflake 真正想看的。如果你正在準備 Snowflake / Databricks / Palantir 的 OA,可以微信 Coding0201 聯繫,傳邀請截圖,先做題庫判定,再排 OA 輔助節奏。


需要面試真題? 立刻聯繫微信 Coding0201取得真題


聯絡方式