最近剛剛完成了 TikTok 的 Online Assessment 。我平時對 CodeSignal 的 GCF 題庫練得比較勤,這次 4 道題僅用時 13 分鐘 便全部 AC。大家應該都知道, TikTok OA 刷人挺狠的,但只要掌握了套路,其實難度也就那樣。為了幫大家避坑,我把這次的實戰經驗整理了出來。
個人背景
學歷: 南加州大學 (USC) 電腦科學碩士在讀。
經驗: 1.5 年網際網路後端實習/開發經驗。
TikTok 的題其實和位元組內推的邏輯很像,核心是快和準。CodeSignal 是有速度分的,所以建議大家一定要練熟基本模板。

TikTok OA 基本情況
平臺:CodeSignal
時長:70 分鐘
題量:4 題
難度結構:
- Q1:Easy(模擬)
- Q2:Easy–Mid(字首 / Trie)
- Q3:Mid(字串模擬)
- Q4:Mid(思維題,隨機)
建議節奏:
- Q1:10–15 min
- Q2:15 min
- Q3:10 min
- Q4:剩餘時間
前三題儘量在 45 分鐘內做完,不然後面會非常趕。
題目 1:配送中心排程問題
你要管理一個處理包裹配送的配送中心網路。每個中心在需要重置前,都有不同的包裹處理容量。
輸入引數
centerCapacities:一個整數陣列,centerCapacities[i]的值在 1~5 之間,表示第 i 個配送中心在需要維護前,最多能處理的包裹數量。dailyLog:一個字串陣列,dailyLog[i]為以下兩種操作之一:"PACKAGE":有一個新包裹需要處理"CLOSURE ":第 j 個配送中心因維護暫時關閉
包裹分配規則
- 包裹會按順序分配給各個配送中心:每個中心在容量範圍內處理包裹,滿了之後就把包裹發給下一個可用的中心。
- 當一輪完整遍歷完所有中心(回到中心 0)後,所有處於運營狀態的中心的容量會被重置為初始值;但關閉的中心仍然不可用。
- 系統分配包裹時會自動跳過已關閉的中心。
- 題目保證整個過程中始終至少有一箇中心處於運營狀態。
輸出要求
返回處理包裹數量最多的配送中心的索引。如果多箇中心的包裹處理數量並列最多,返回其中索引最大的那個。
複雜度要求
時間複雜度不超過 O(centerCapacities.length × dailyLog.length) 即可透過。
示例
- 輸入:
centerCapacities = [1, 2, 1, 2, 1]dailyLog = ["PACKAGE", "PACKAGE", "CLOSURE 2", "PACKAGE", "CLOSURE 3", "PACKAGE", "PACKAGE"] - 解釋:
- 第 1 個包裹:中心 0 處理(已達容量上限),處理數:
[1,0,0,0,0],剩餘容量:[0,2,1,2,1] - 第 2 個包裹:中心 1 處理,處理數:
[1,1,0,0,0],剩餘容量:[0,1,1,2,1] CLOSURE 2:中心 2 關閉- 第 3 個包裹:中心 1 處理(仍有容量),處理數:
[1,2,0,0,0],剩餘容量:[0,0,1,2,1] CLOSURE 3:中心 3 關閉- 第 4 個包裹:跳過中心 2、3,分配給中心 4,處理數:
[1,2,0,0,1],剩餘容量:[0,0,1,2,0] - 所有運營中心遍歷一輪結束,容量重置:剩餘容量恢復為
[1,2,1,2,1](中心 2、3 仍關閉) - 第 5 個包裹:分配給中心 0,處理數:
[2,2,0,0,1],剩餘容量:[0,2,1,2,1]
- 第 1 個包裹:中心 0 處理(已達容量上限),處理數:
- 輸出:
1(中心 0 和中心 1 都處理了 2 個包裹,取索引更大的中心 1)
解題思路
- 維護
remaining[](剩餘容量)、processed[](處理總數)、closed[](關閉狀態) - 用指標
cur記錄當前分配位置 - 關鍵: 一輪結束判斷 —— 當指標從某處迴繞到 0(即完成一次完整遍歷)時,重置所有運營中心的容量
- 最終返回
processed中最大值對應的最大索引
題目 2:最長公共字首長度問題
給定兩個數字陣列 firstArray 和 secondArray,求:從兩個陣列中各取一個數字,組成的所有數對中,最長公共字首(LCP)的長度。如果不存在任何公共字首,返回 0。
說明
- 數字的字首:由數字的一位或多位組成,從最高位開始。例如
123是12345的字首,2是234的字首。 - 兩個數字的公共字首:同時是這兩個數字字首的數。例如
5655359和56554的最長公共字首是5655(長度為 4);123和456沒有公共字首。
輸入引數
firstArray:正整數陣列,長度範圍[1, 5×10⁴],元素範圍[1, 10⁹]secondArray:正整數陣列,長度範圍[1, 5×10⁴],元素範圍[1, 10⁹]
輸出要求
返回所有跨陣列數對中,最長公共字首的長度;無公共字首則返回 0。
示例
- 輸入:
firstArray = [25, 288, 2655, 54546, 54, 555]secondArray = [2, 255, 266, 244, 26, 5, 54547]輸出:4解釋:firstArray中的54546和secondArray中的54547的最長公共字首是5454,長度為 4。 - 輸入:
firstArray = [25, 288, 2655, 544, 54, 555]secondArray = [2, 255, 266, 244, 26, 5, 5444444]輸出:3解釋:firstArray中的544和secondArray中的5444444的最長公共字首是544,長度為 3。 - 輸入:
firstArray = [817]secondArray = [1999, 1909]輸出:0解釋:兩個陣列中沒有任何數對存在公共字首。
解題思路
暴力 O(N×M×L) 會超時。核心最佳化:用 Trie(字首樹)
- 將
firstArray中所有數的每一個字首(字串形式)存入雜湊集合 - 遍歷
secondArray中每個數的所有字首,查詢是否在集合中存在,取最大匹配長度
時間複雜度:O((N + M) × L),L 為最大數字長度(≤10),完全滿足要求。
題目 3:數字字串位相加問題
給定兩個僅由數字組成、無前導零的字串 a 和 b,按以下規則處理:
從兩個字串的末尾開始,每一位數字相加:
- 取
a的倒數第 i 位數字,加上b的倒數第 i 位數字 - 如果其中一個字串的倒數第 i 位不存在,則只取另一個字串的倒數第 i 位數字
- 將每一位的和拼接成一個新的字串返回
輸入引數
a:數字字串,僅含數字、無前置零b:數字字串,僅含數字、無前置零
輸出要求
返回按上述規則拼接得到的字串。
示例
- 輸入:
a = "99",b = "99"輸出:"1818"解釋:倒數第 1 位9+9=18,倒數第 2 位9+9=18,拼接結果為1818。 - 輸入:
a = "11",b = "9"輸出:"110"解釋:倒數第 1 位1+9=10,倒數第 2 位1(b無對應位),拼接結果為110。
解題思路
- 雙指標從末尾往前走
- 每步取對應位(另一個不存在則取0),求和轉字串
- 將每步結果收集後反轉拼接(因為是從末尾開始處理)
題目 4:最大連續子陣列優美和
給你一個整數陣列 nums,定義優美數:一個數字僅由偶數數字組成(0、2、4、6、8),不含 1、3、5、7、9。
例如:2、48、206、88 是優美數;12、23、5 不是優美數。
規則
- 只選取陣列中全部元素都是優美數的連續子陣列;
- 求所有符合條件的連續子陣列的元素和,返回其中最大和;
- 若陣列中沒有任何優美數,返回 0。
輸入
整數陣列 nums,元素範圍 -1000 ~ 1000,陣列長度 1 ≤ n ≤ 1000
輸出
符合條件的連續全優美數子陣列的最大和
示例
範例 1:
輸入:nums = [28, 40, 13, 68, 7]
解釋:
[28,40] 都是優美數,和 = 68
[68] 和 = 68
最大和為 68
輸出:68
範例 2:
輸入:nums = [12, 35, 79]
沒有優美數,輸出:0
範例 3:
輸入:nums = [8, 24, -4, 66]
整段都是優美數,和 = 94
輸出:94
解題思路
- 先寫一個判斷函式:傳入一個整數,判斷每一位是否全是偶數(0、2、4、6、8),用來判定是不是優美數。
- 遍歷陣列,用連續子陣列滑動思路:
- 遇到優美數:累加當前連續和。
- 非優美數:斷開連續,重置當前和為 0。
- 全程不斷更新全域性最大和。
- 最後若無任何優美數,返回 0,否則返回最大和。
TikTok Online Assessment備戰心得與實戰建議
- CodeSignal 分數水分: 不要只追求 AC,要追求快速 AC。同樣的 Full Score,15 分鐘完成的和 70 分鐘完成的,在 HR 裡的權重是不一樣的。
- 刷題重點: 重點看 CodeSignal 上的 Industry Coding Framework,特別是關於模擬和 DP 的部分。
別讓冷凍期耽誤了你的大廠夢
面對 TikTok 這種頂級大廠,試錯成本極高(一旦掛了通常有 6 個月的冷凍期)。如果你對自己的 OA 穩定性沒有 100% 的把握,或者對面試時的實時思路感到壓力,我強烈建議瞭解 ProgramHelp 的輔助服務:
- OA 無痕代寫: 原創手寫程式碼,無痕過檢,確保 100% AC。
- VO 實時輔助: 北美資深 SDE 導師線上,面試時實時提供解題邏輯與程式碼思路,助你征服面試官。
- 全流程支援: 從簡歷包裝到上岸後的入職輔導,提供真正的“陪跑”服務。
職場不是隻有硬拼,合理的“外力”能讓你在激烈的競爭中降維打擊。