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 初始为空。可重复执行:
- 追加任意字符到 S,代价 5 分
- 复制任意以当前末位结束的子串,追加到 S,代价 5 分
构造字符串 "abhibhibhi" 的最小代价是多少?
选项:A. 35 / B. 30 / C. 25 / D. 20
推导
- 第 1 步:追加
a(cost=5) → S = "a" - 第 2 步:追加
b(cost=10) → S = "ab" - 第 3 步:追加
h(cost=15) → S = "abh" - 第 4 步:追加
i(cost=20) → S = "abhi" - 第 5 步:复制末尾子串 "bhi"(以末位
i结束的子串),追加→S = "abhibhi" (cost=25) - 第 6 步:复制末尾子串 "bhi"(注意此时末位仍是
i),追加→S = "abhibhibhi" (cost=30)
正确答案:B. 30
关键点
- "复制以当前末位结束的子串"——子串必须以当前 S 的最后一个字符结尾
- 第 5 步操作完成后 S 的最后一个字符仍是
i,所以第 6 步可以再次复制"bhi" - 干扰项 25 来自"少算一步"(只复制一次);35 来自"全部追加"
MCQ 2:Brodie Helmet 与统计学偏差
题目
一战中 Brodie 头盔投入使用后,野战医院里重度头部受伤的病例显著增加。指挥部曾考虑重新设计头盔,直到一位统计学家指出:那些原本会被弹片直接击毙的士兵,现在因为头盔保护幸存下来送进医院了。
这是什么类型的统计偏差?
选项:A. Sampling Bias / B. Confirmation Bias / C. Survivorship Bias / D. Susceptibility Bias
解析
答案:C. Survivorship Bias
幸存者偏差经典案例。未被观察到的样本(阵亡士兵)系统性消失,导致仅观察"幸存"群体得出错误结论。其他选项的区别:
- Sampling Bias:抽样方法本身有偏(如只在白天调查)
- Confirmation Bias:选择性关注支持自己假设的数据
- Susceptibility Bias:暴露与未暴露组在风险因素上本身不可比
TikTok 评分点
TikTok 看重候选人是否能区分这 4 种偏差——简历项目中说"我用 A/B test 验证了模型"也常被问到 sampling/survivorship bias。
MCQ 3:右偏分布的均值/中位数/众数
题目
对于右偏(正偏)分布,下列陈述哪些正确?(多选)
- A. mean > mode
- B. mean < mode
- C. mean > median
- D. mean < median
解析
答案:A 和 C
右偏分布特征:右侧长尾把均值"拉高",导致 mean > median > mode。
高峰
│
┌─────┘
│ ──────_____ 长尾向右
mode median mean
A 和 C 都对,B 和 D 都错。这是 TikTok 数据科学相关岗位的高频考点。
Coding 1:括号补全最大效率
题目
给定括号序列 s,再给一个括号工具集 kitParentheses 和它们的效率值 efficiencyRatings。
目标:从工具集中选 0 个或多个括号插入 s,使最终序列合法(括号配对正确),并且总效率最大。返回最大效率。
输入:
s:初始括号序列kitParentheses:可用括号字符列表efficiencyRatings:每个工具括号的效率值
输出:最大可达效率值
解题思路
关键观察:合法括号序列的所需补充完全由 s 决定——计算 s 中未匹配的左括号数 open 和未匹配的右括号数 close,必须补 close 个 ( 在前,open 个 ) 在后。
但这里"工具集"的特殊性:每个工具括号有正负效率,所以策略是:
- 必须补的部分:从 kit 中选效率最高的对应括号
- 可选的部分:每对
(+)如果效率之和 > 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