刚带学员走完一场 TikTok 2026 Intern SDE OA 。整场考试节奏其实挺快的,四道题基本都是比较典型的算法 / 模拟题型,如果平时刷题量还可以的话,思路基本都能很快反应出来。
这次整体用时不长,前两题属于比较基础的实现题,后两题稍微需要一点思路,但也不算特别复杂。学生第三题一开始抄代码的时候有个小地方写错了,不过及时检查出来修改之后也顺利 AC 了,最后四题全部通过。
下面简单把题目类型和核心思路整理一下,给后面准备 TikTok OA 的同学参考。

Q1 绘制星号边框正方形
题目描述
第一题属于典型的输出模拟题。题目给定一个整数 n,要求打印一个 n × n 的正方形,其中边框使用 *,中间部分为空格,也就是常见的“空心正方形”。
例如 n = 5 时,输出结构大致如下:
*****
* *
* *
* *
*****
整体就是要求把正方形的四条边用星号填满,而中间区域保持为空。
解题思路
实现时可以通过两层循环来完成。外层循环控制行数,内层循环控制列数。对于每一个位置 (i, j),根据它是否位于边界来决定输出内容。
当行号是第一行或最后一行时,整行都输出 *。如果是中间的行,则只在第一列和最后一列输出 *,中间的部分全部输出空格。这样就能形成一个完整的边框结构。
需要注意一个特殊情况:如果 n = 1,只需要输出一个 * 即可。这个题整体难度非常基础,主要是考察循环控制和输出格式。
Q2 双城往返时间计算
题目描述
第二题开始进入模拟类问题。题目给定两个城市之间的发车时刻表,并且每个方向都有固定的发车时间列表。乘客需要不断在两个城市之间往返。
规则是每次乘车必须选择发车时间不早于当前时间的班次。乘车之后会消耗100 分钟(包括行程和中转),然后需要继续从另一座城市乘坐下一班车。
题目的目标就是根据这些时刻表,模拟整个往返过程。
解题思路
这个题的核心其实是时间推进模拟。我们可以维护一个当前时间 t,每次准备乘车时,都要在当前方向的时刻表中找到第一班发车时间大于等于当前时间的车次。
找到这班车之后,就可以更新当前时间为 departure + 100。随后切换方向,从另一座城市的时刻表中继续寻找下一班车。
如果时刻表是已经排好序的数组,那么寻找下一班车时可以使用二分查找(例如 lower_bound)。这样每次查找的时间复杂度就是 O(log n),整体效率会比较高。
Q3 最小山峰高度差
题目描述
第三题是一道数组类问题。题目给定一个数组 height 表示山峰高度,同时给定一个整数 k,表示两个山峰之间的最小索引距离。
要求在所有满足 |i - j| ≥ k 的山峰对中,找到高度差最小的一对,并输出这个最小差值。
换句话说,需要在所有合法的 (i, j) 组合中,计算 |height[i] - height[j]|,然后取最小值。
解题思路
最直接的方法就是枚举所有满足条件的山峰对。可以通过两层循环遍历数组,分别作为 i 和 j。在遍历时只需要判断两者的索引差是否满足 |i - j| ≥ k。
如果满足条件,就计算两座山峰的高度差,并更新当前最小值。整个过程其实就是一个简单的暴力枚举。
这种方法的时间复杂度是 O(n²)。如果数组规模不是特别大,在 OA 中通常是可以通过的。理论上也可以通过排序或滑动窗口等方法进一步优化,但大多数情况下并不需要。
Q4 航班往返任务模拟
题目描述
第四题的结构和第二题其实非常相似,同样是一个时间模拟问题。题目给定两个地点:Alpha 和 Beta,并且给出两个方向的航班时刻表。
每个任务都需要完成一次往返,也就是:
Alpha → Beta → Alpha
并且需要重复执行多次任务。
解题思路
解题思路依然是模拟时间推进。我们首先维护一个当前时间 t。每次从 Alpha 出发时,需要在 Alpha → Beta 的航班列表中找到最早一班发车时间不早于当前时间的航班。
乘坐这班航班之后,更新当前时间为到达时间。接着在 Beta → Alpha 的航班列表中再次寻找下一班符合条件的航班。完成这两步之后,就完成了一次往返任务。
随后继续重复这个过程,直到所有任务完成。如果航班时刻表是有序的,同样可以使用二分查找来快速定位下一班航班,这样整个模拟过程的效率会更高。
OA 卡壳其实挺常见
我们这边平时也会带学员做 TikTok / Amazon / Google / Uber 的 OA 实战模拟,如果你对这种 OA 不太熟或者担心临场发挥,也可以了解一下我们的 面试辅助 / OA 实时助攻 ,关键时刻给一点思路提醒,很多同学就是这样稳稳把 OA 过掉的。