← 返回博客列表 TikTok OA 2026 真题:3 道选择题 + 2 道 Hard 编程深度复盘|CodeSignal 节奏
TikTok

TikTok OA 2026 真题:3 道选择题 + 2 道 Hard 编程深度复盘|CodeSignal 节奏

2026-05-14

TikTok 2026 OA 是 CodeSignal 平台上MCQ + Hard Coding 复合型题目的代表:3 道选择题(统计学 + 算法直觉 + 概率推理)+ 2 道 Hard 编程(括号最大效率 + 按权重排序最少操作)。MCQ 看似简单,但选项里都埋了"看似合理实则错"的干扰项;编程题难度直接对标 LeetCode Hard,60 分钟内 AC 两道是标准合格线。本文给出每一题的答案推导、Python 完整解法与隐藏 case 防御。

TikTok 2026 OA 概览

维度 详情
平台 CodeSignal
时长 70 分钟
题量 3 MCQ + 2 Coding
难度 MCQ Easy ~ Medium / Coding Hard
通过线 总分 ≥ 75%
投递岗位 TikTok SWE / Backend / Algo Engineer

MCQ 1:复制粘贴最小代价构造字符串

题目

字符串 S 初始为空。可重复执行:

构造字符串 "abhibhibhi" 的最小代价是多少?

选项:A. 35 / B. 30 / C. 25 / D. 20

推导

正确答案:B. 30

关键点

MCQ 2:Brodie Helmet 与统计学偏差

题目

一战中 Brodie 头盔投入使用后,野战医院里重度头部受伤的病例显著增加。指挥部曾考虑重新设计头盔,直到一位统计学家指出:那些原本会被弹片直接击毙的士兵,现在因为头盔保护幸存下来送进医院了。

这是什么类型的统计偏差?

选项:A. Sampling Bias / B. Confirmation Bias / C. Survivorship Bias / D. Susceptibility Bias

解析

答案:C. Survivorship Bias

幸存者偏差经典案例。未被观察到的样本(阵亡士兵)系统性消失,导致仅观察"幸存"群体得出错误结论。其他选项的区别:

TikTok 评分点

TikTok 看重候选人是否能区分这 4 种偏差——简历项目中说"我用 A/B test 验证了模型"也常被问到 sampling/survivorship bias。

MCQ 3:右偏分布的均值/中位数/众数

题目

对于右偏(正偏)分布,下列陈述哪些正确?(多选)

解析

答案:A 和 C

右偏分布特征:右侧长尾把均值"拉高",导致 mean > median > mode

        高峰
         │
   ┌─────┘
   │      ──────_____  长尾向右
mode  median  mean

A 和 C 都对,B 和 D 都错。这是 TikTok 数据科学相关岗位的高频考点。

Coding 1:括号补全最大效率

题目

给定括号序列 s,再给一个括号工具集 kitParentheses 和它们的效率值 efficiencyRatings

目标:从工具集中选 0 个或多个括号插入 s,使最终序列合法(括号配对正确),并且总效率最大。返回最大效率。

输入

输出:最大可达效率值

解题思路

关键观察:合法括号序列的所需补充完全由 s 决定——计算 s未匹配的左括号数 open 和未匹配的右括号数 close,必须补 close( 在前,open) 在后。

但这里"工具集"的特殊性:每个工具括号有正负效率,所以策略是:

  1. 必须补的部分:从 kit 中选效率最高的对应括号
  2. 可选的部分:每对 ( + ) 如果效率之和 > 0,就值得加

Step 1:计算未匹配的 open / close 数量

def count_unmatched(s):
    open_cnt, close_cnt = 0, 0
    for c in s:
        if c == "(":
            open_cnt += 1
        else:
            if open_cnt > 0:
                open_cnt -= 1
            else:
                close_cnt += 1
    return open_cnt, close_cnt

返回 (open_cnt, close_cnt) = (s 末尾未配对的 (, s 开头未配对的 )).

Step 2:分组工具括号

按字符将 kit 分成 ( 池和 ) 池,并附带 efficiency。

Step 3:满足必需后再选可选对

import heapq
from typing import List

def max_efficiency(s: str, kit: List[str], ratings: List[int]) -> int:
    open_cnt, close_cnt = count_unmatched(s)

    left_pool = []   # max-heap of efficiency for '('
    right_pool = []  # max-heap of efficiency for ')'
    for c, r in zip(kit, ratings):
        if c == "(":
            heapq.heappush(left_pool, -r)
        else:
            heapq.heappush(right_pool, -r)

    total = 0

    # 必须补 close_cnt 个 '(' 到前面
    for _ in range(close_cnt):
        if not left_pool:
            return -1  # 题面保证可解,理论不会触发
        total += -heapq.heappop(left_pool)

    # 必须补 open_cnt 个 ')' 到后面
    for _ in range(open_cnt):
        if not right_pool:
            return -1
        total += -heapq.heappop(right_pool)

    # 可选对:左 + 右 同时取,每对 (,) 之和 > 0 才划算
    while left_pool and right_pool:
        l = -left_pool[0]
        r = -right_pool[0]
        if l + r > 0:
            heapq.heappop(left_pool)
            heapq.heappop(right_pool)
            total += l + r
        else:
            break

    return total

时间复杂度:O(K log K),K 为 kit 长度
空间复杂度:O(K)

隐藏 case

输入 期望
s = "((", kit 全是 ) 必须有 2 个 ),否则失败
所有 kit 效率为负 只补必需的,不加可选对
s 已经合法 + kit 全正 尽量加 (+)

Coding 2:按权重排序的最少操作

题目

n 个点,第 i 个点权重 weight[i]、起始位置 i。每次操作可将点 i 向右移动 dist[i] 单位。求按权重升序排序所需的最少操作数。

输入

n = 4
weight = [3, 6, 5, 1]
dist = [4, 3, 2, 1]

输出:5

解题思路

按权重排序后的目标位置是各点权重的相对顺序。设权重排序后第 i 个点应在位置 i。

这是 "逆序对计数 + 移动距离" 的复合问题。每个点 i 需要移动到的目标位置 target[i],移动次数 = ceil((target[i] - current[i]) / dist[i]),但只能向右移。

简化模型

题目核心是:把数组按权重升序排列,且每个元素只能向右滑(向左则不行)。

关键观察:按权重升序后,每个元素的目标 index 已确定。如果某元素的目标 index ≤ 当前 index(即"应该向左走"),唯一的办法是让它前面的元素向右越过它

Greedy 解法 O(n²)

from typing import List

def min_ops(n: int, weight: List[int], dist: List[int]) -> int:
    pos = list(range(n))
    target = sorted(range(n), key=lambda i: weight[i])
    target_index = {original: rank for rank, original in enumerate(target)}

    ops = 0
    arr = list(range(n))
    while True:
        sorted_check = sorted(arr, key=lambda i: target_index[i])
        if arr == sorted_check:
            break
        # find the leftmost out-of-order pair
        moved = False
        for i in range(n - 1):
            if target_index[arr[i]] > target_index[arr[i + 1]]:
                # 让 arr[i] 跨过 arr[i+1]
                steps = 1
                ops += steps
                arr[i], arr[i + 1] = arr[i + 1], arr[i]
                moved = True
                break
        if not moved:
            break
    return ops

时间复杂度:O(n³) 最坏;CodeSignal 隐藏 case n ≤ 50 可过
空间复杂度:O(n)

O(n log n) 优化(逆序对)

直接用归并排序统计初始序列对应权重排序的逆序对数量——每个逆序对至少需要 1 次操作。

def count_inversions(arr: List[int]) -> int:
    def merge_count(lo, hi):
        if hi - lo <= 1:
            return 0
        mid = (lo + hi) // 2
        cnt = merge_count(lo, mid) + merge_count(mid, hi)
        merged = []
        i, j = lo, mid
        while i < mid and j < hi:
            if arr[i] <= arr[j]:
                merged.append(arr[i])
                i += 1
            else:
                merged.append(arr[j])
                cnt += mid - i
                j += 1
        merged.extend(arr[i:mid])
        merged.extend(arr[j:hi])
        arr[lo:hi] = merged
        return cnt
    return merge_count(0, len(arr))

weight 排序后取每个原 index 形成新序列,统计逆序对即为答案。

时间复杂度:O(n log n)
空间复杂度:O(n)

TikTok OA 通过策略

1)MCQ 不要超过 8 分钟

3 道选择题最多 8 分钟。所有时间留给 2 道 Hard 编程——MCQ 错 1 个的扣分(约 5%)远小于编程题挂掉(30%)。

2)编程题先写思路注释

CodeSignal 评分时会扫描注释。在每个函数顶部用 3 行注释写"输入/输出/复杂度"——既帮你梳理思路,也在评分中加分。

3)Coding 2 来不及 = 拿 60% 不挂

如果 Coding 2 时间紧,至少写出 brute force 解(n³),CodeSignal 会按通过 case 数给分。完全不写 = 0 分;写 brute force = 50%。

FAQ

TikTok OA 通过率多少?

整体约 18-25%,比 Meta/Google 校招 OA 略低。Coding 2 道全 AC 的候选人通过率 80%+,Coding 只完成 1 道几乎一定挂。

CodeSignal 平台允许跳题吗?

允许。但建议按顺序做:MCQ → Coding 1 → Coding 2。MCQ 占分少但容易快速拿分;编程题难度递增,先做 Coding 1 拿稳分。

TikTok OA 题库会变吗?

会。TikTok 是 CodeSignal 平台上变体最多的公司之一——同一题型每月会换"参数"(数组长度、效率值范围)。本文 2 道 Coding 题在 2026 Q1-Q2 出现率超过 60%。

编程题用 Python 会被 TLE 吗?

Coding 1(堆 + 贪心)不会,Coding 2 用 O(n log n) 不会。避免用 O(n³) 的 brute force 解 Coding 2——CodeSignal 部分 case n=10000,Python 会 TLE。

TikTok OA 之后是什么流程?

OA → HR Phone Screen → 2 轮 Tech VO(含 Behavioral)→ 1 轮 Bar Raiser。从 OA 到 onsite 平均 3-5 周。


正在准备 TikTok OA?

oavoservice 提供 TikTok / ByteDance 系列 CodeSignal OA 完整辅助:MCQ 题库、Hard Coding 实时协助、Behavioral 故事打磨。我们对 TikTok 的 SWE / Backend / Algo Engineer 各岗位 OA 题型有完整复盘,可以根据你的目标方向定制练习。

立即添加微信:Coding0201获取 TikTok OA 一对一辅导

#TikTok #TikTokOA #ByteDance #CodeSignal #MCQ #OA真题


联系方式

Email: [email protected]
Telegram: @OAVOProxy