最近刚刚完成了 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>":第 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 导师在线,面试时实时提供解题逻辑与代码思路,助你征服面试官。
- 全流程支持: 从简历包装到上岸后的入职辅导,提供真正的“陪跑”服务。
职场不是只有硬拼,合理的“外力”能让你在激烈的竞争中降维打击。