← 返回博客列表 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获取真题


联系方式