← 返回博客列表
Google

Google 面试实录:RPG 连击链(Combo Chain)O(N) 解法

2025-08-13

🎮 题目背景:RPG 里的 Combo Chain

在一Google SDE 实时面试辅助中,我们遇到了一道看似轻松、实则暗藏杀机的题目——一个包装成“RPG 游戏连击系统”的 *Subsequence + DP 变种

题目非常有代表性:

csvosupport 的实时辅助下,这位客户成功从 naive 思路跃迁到最优解,并follow-up 中给出了空间友好的“路径还原”方案,拿下Google SDE Intern 的下一轮机会


💬 题目要求(场景改编版

Scenario: 你在玩一RPG 游戏,每一关都有一个难度值,按数组顺序给出 Goal: 你想打出一条最长的 "Combo Chain" 连击。规则是:你选择的每一关,下一关的难度必须刚好比上一关大 1。你可以跳过关卡,但必须*保持原始顺序 Task: 返回这样一Combo Chain 最大长

示例

Input:  [10, 5, 11, 6, 7, 12, 8]
Output: 4
Explanation: 最长合法链5 -> 6 -> 7 -> 8
# 10 -> 11 -> 12 只有长度 3,更短

🧠 思路复盘:从 Clarification 到状态设

在面试开始的2 分钟,csvosupport 先引导客户完成关Clarification

很多候选人此时会直接套最长递增子序(LIS) 模板

复杂度:(O(N^2))。在 LeetCode 可能还能过,Google 面试基本宣判思路不够敏锐*

csvosupport 的关键提示:利用“固定差1”压缩到 O(N)

我们在协同屏幕上直接给出一个更高层的抽象:

“这是一difference 固定1 的子序列问题,可以用哈希表记录‘以某个值结尾的最长链’。

于是自然得到状态定义:

当遍历到一个难x 时:

  1. 只需要看之前有没有出现过 x - 1
  2. 如果有,那么当前值可以接dp[x - 1] 那条链后面:dp[x] = dp[x - 1] + 1
  3. 如果没有,x 自己就单独开一条新链:dp[x] = 1

全程只需一遍扫+ 哈希表,即可做到 O(N)


💻 代码骨架(Python 版)

def longest_combo(levels):
    dp = {}          # dp[x] = 以难x 结尾的最长连击长
    max_combo = 0

    for level in levels:
        prev_length = dp.get(level - 1, 0)
        dp[level] = prev_length + 1
        max_combo = max(max_combo, dp[level])

    return max_combo

csvosupport 的提示下,客户现场一次性写对,没有经历 N^2 再优化的“绕路过程”,直接给出最优解,面试官当场点头认可


🔁 Follow-up:如何返回具体的关卡序列

面试官紧接着抛出经典追问

“如果我们不仅要返回长度,还要返回这串具体的关卡序列(例[5, 6, 7, 8]),怎么办?

很多人第一反应是:

这样一来:

csvosupport 的极简还原思路

我们给客户的提示只有一句话

“不要存 List,只要记*最长链的结尾 就行,剩下都能倒推。

具体做法

  1. 在更max_combo 时,同步记录对应end_val

    if dp[level] > max_combo:
        max_combo = dp[level]
        end_val = level
    
  2. 已知

    • 最长长L = max_combo
    • 结尾难度 end_val

    那么整条链一定是

    [end_val - L + 1, ..., end_val - 1, end_val]
    
  3. 倒推生成后再 reverse 一下即可得到从小到大的链条

客户在此基础上,向面试官自然地解释:

“Since the step is strictly +1, once I know the max length and the ending value, I can reconstruct the sequence in O(L) just by subtracting 1 repeatedly.

面试官评价:**“Simple and efficient.*


实战结果

整场面试中,客户表现出了

最终结果:成功拿到 Google SDE Intern 下一System Design 面试机会


🎓 面试启示


📮 upcoming Google / Meta / Amazon / TikTok 面试

如果你也即将走进大厂的面试间,却担心

csvosupport 可以成为你最强的场外搭档

👉 一场面试可能决定你能不能留下。我们会帮你:写好每一行代码,稳住每一个环节

*需要面试辅助服务?欢迎私信咨询 csvosupport


需要面试真题? 立刻联系微信 Coding0201,获得真题