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
Step 2:分組工具括號 + 貪心
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 = []
right_pool = []
for c, r in zip(kit, ratings):
if c == "(":
heapq.heappush(left_pool, -r)
else:
heapq.heappush(right_pool, -r)
total = 0
for _ in range(close_cnt):
if not left_pool:
return -1
total += -heapq.heappop(left_pool)
for _ in range(open_cnt):
if not right_pool:
return -1
total += -heapq.heappop(right_pool)
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:
target = sorted(range(n), key=lambda i: weight[i])
target_index = {orig: rank for rank, orig in enumerate(target)}
ops = 0
arr = list(range(n))
while True:
progressed = False
for i in range(n - 1):
if target_index[arr[i]] > target_index[arr[i + 1]]:
ops += 1
arr[i], arr[i + 1] = arr[i + 1], arr[i]
progressed = True
break
if not progressed:
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