TikTok 技术面试真实还原:一道 BFS 网格最短距离题,如何从 O(A·RC) 优化到 O(RC)

这是一场 TikTok General Technical Interview 的真实还原。


开场环节

面试官非常直接:

“Today we will have a general technical interview. First a brief introduction, then one coding question.”

候选人做了大约 3 分钟自我介绍,讲了:

  • USC CS 硕士
  • Amazon Visual Search 团队
  • 后端 + 用户行为分析
  • 图像匹配系统优化 20% latency
  • 对 AI 应用很感兴趣

面试官没有深挖,直接进入 coding。

这种节奏在 TikTok 很常见——

寒暄很短,coding 才是核心。


题目展示

题目如下:

Given a grid, there are A's, B's, and 0's.
Find the shortest distance between any A and any B.
(can move in 4 directions: up, down, left, right)

举例:

[[A, 0, 0],
[0, B, 0],
[A, B, 0]]

Output: 1


第一反应:单源 BFS

候选人读题后马上确认:

“So basically it’s finding the shortest distance between A and B in the grid, right?”

思路非常自然:

  • 遍历所有 A
  • 对每个 A 做一次 BFS
  • 找最近的 B
  • 取最小值

这是一个正确但不够优的答案

面试官立刻追问:

“What will be the time complexity?”

候选人回答:

“Worst case traverse entire grid, so O(R * C)”

面试官没有放过:

“But you do BFS for every A… there may be multiple A.”

这里是关键点。


面试真正考察的点出现了

如果有 K 个 A:

时间复杂度 = O(K × R × C)

在最坏情况下,K 接近 R×C。

那就是:

O((R×C)²)

面试官提示:

“How about you just do BFS for all A at the same time?”

这一句其实已经是强烈引导


正确优化:Multi-source BFS

候选人思考几秒后理解:

  • 把所有 A 一次性入队
  • 同时作为 BFS 起点
  • 层序扩散
  • 第一次遇到 B 就是全局最短

这就是典型:

Multi-source BFS

时间复杂度直接降为:

O(R × C)

因为每个节点最多入队一次。

面试官确认:

“When you first see B, that should be the shortest one, right?”

候选人:

“Yes, that makes sense.”

这一段就是这场面试的核心。


Coding 过程

候选人选择 Java,实现逻辑包括:

  • 方向数组
  • visited[][]
  • queue
  • 先扫描 grid,把所有 A 入队,distance=0
  • BFS 扩散
  • 遇到 B 立即 return

细节方面:

✔ 有 boundary check
✔ 有 visited 标记
✔ 正确处理 rectangular grid(面试官特意测试)

面试官还额外让他:

“Try a rectangular grid, not square.”

很多人会忽略这一点。

候选人代码处理 rows 和 columns 分离,没有问题。


结束前的反向提问

Coding 结束后,候选人问:

  • Backend 主要用什么语言?
  • 前 6 个月成功标准是什么?
  • 在 TikTok 工作最享受什么?

面试官回答:

  • Go 是主语言
  • Backend 工具熟悉即可
  • 公司允许自由使用 AI 工具

面试整体氛围:

不刁难
但会在复杂度上深挖
更重思维过程而不是技巧


这道题真正考什么?

表面是 BFS。

真正考:

  1. 你是否能意识到多起点优化
  2. 是否理解 BFS 层级性质
  3. 是否能分析复杂度
  4. 是否能在被 challenge 后迅速调整思路

很多人会卡在第一步:

“对每个 A 做 BFS”

但 TikTok 想看的是:

你是否 instinctively 想到 multi-source。


如果没有提示怎么办?

真正高阶候选人应该这样推导:

  • 单源 BFS → O(K·RC)
  • K 最坏为 RC
  • 明显可优化
  • 把所有 A 当成一个超级源点

这一步,是 senior 和 junior 的分水岭。


我们在 TikTok OA / VO 辅助中会做什么?

如何在被追问时不慌
如何在 30 秒内意识到复杂度问题
如何优雅地完成优化

或者即将进入 VO 阶段,

我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *