
刚做完一场 TikTok OA,还是 CodeSignal,四题半小时不到 AC。
这场难度不算高,基本都是模拟 + 实现,真正容易丢分的反而是题目里的几个小条件。把这次遇到的题简单记一下,准备 TikTok OA 的可以看看。
T1|数位乘积 - 数位和
给一个正整数 n,计算:
各位数字乘积 - 各位数字之和
比如 123456:
乘积 = 720
和 = 21
答案 = 699
直接 % 10 取个位,//=10 去掉个位,同时维护 product 和 sum。
O(log n),注意乘积中间值可能比较大。
T2|给加法表达式加括号
这个题挺容易因为条件看错。
给定类似:
741+12
必须且只能加一对括号,而且 + 必须在括号里面,左右两边至少各有一位数字。
目标是让最终表达式值最小。
因为字符串长度不大,直接枚举左右括号位置即可。
每种合法划分算:
左边数字 ×(括号内左数字 + 括号内右数字)× 右边数字
最后取最小值。
这题没什么复杂算法,关键就是别把括号的合法范围搞错。
T3|内存分配 + 释放
经典模拟题。
memory 数组:
-
0= 空闲 -
1= 已占用
支持:
alloc X
从左往右找第一段连续 X 个空闲位置,找到后占用,并返回对应 ID。
erase ID
根据 ID 找到之前分配的区间,然后释放。
我的做法就是:
数组模拟 + HashMap
HashMap 保存:
ID → 对应内存区间
这样 erase 时可以直接定位。
这题最容易漏的是:连续 alloc / erase 后会产生碎片,但每次 alloc 还是要从左边重新找。
T4|数轴放灯,覆盖最多物体
objects 已经按升序排列。
在整数坐标放一盏灯,半径是 radius,求最多能照到多少个物体。
如果覆盖数量一样,返回更小的灯位置。
这题直接滑动窗口。
维护一个窗口 [l, r],只要:
objectsr - objectsl ≤ 2 × radius
就说明存在一个灯的位置可以覆盖整个窗口。
不断移动右指针,超出范围就移动左指针,同时记录:
最大覆盖数量 + 最小灯位置
整体 O(n)。
这场 OA 总结
| 题目 | 核心考点 |
|---|---|
| T1 | 数位模拟 |
| T2 | 枚举 + 字符串处理 |
| T3 | 数组模拟 + HashMap |
| T4 | Sliding Window |
这场没有特别难的算法,比较像是在考:
能不能快速读懂规则 → 找到对应模板 → 把边界条件写对。
尤其注意这几个关键词:
product - sum
括号必须包含 +
从左找第一段连续空闲空间
覆盖数量相同取更小坐标
这几个条件一旦看漏,代码再快也容易挂。
另外 TikTok 的 CodeSignal OA 和不少大厂 OA 在题型上确实有一定重合,像模拟、滑动窗口、数组处理这些基础题,平时多练几遍,上手速度会快很多。
最近也在整理 Amazon、Microsoft、Google、Uber、Roblox、Garena、Shopee 等公司的 OA / VO 题目和面经。
正在准备 OA 或 VO 的,可以一起交流。