← 返回部落格列表 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

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