大家好,最近刚刚完成字节跳动的一场OA。和 TikTok 一样,这场考试在 CodeSignal 平台进行,总时长 70 分钟,需要完成 4 道编程题。我之前已经积累了不少类似经验,这次抽到的题目属于题库常见类型,手感比较好,从开始读题到全部提交只用了十几分钟,后面还有充足时间检查边界条件和优化代码,最终顺利通过。

字节的 OA 整体风格偏向实用编程能力考察,虽然时间限制不算宽松,但只要平时多接触 CodeSignal 上的原题,应对起来会轻松很多。下面我把四道题的背景、解题过程和一些思考详细展开,希望能给正在准备字节、TikTok 或者其他 CodeSignal OA 的同学提供一些参考。

题目 1:用户评级等级计算

这道题的核心是根据用户评分的变化来确定最终等级。系统会给出一个初始评分(范围在 1 到 2500 之间),同时提供一个 changes 数组,里面记录了多次评分调整的值。最终需要根据计算出的评分落在哪个区间,返回对应的等级字符串,包括 beginner、intermediate、advanced 和 pro。

解题过程其实非常直白。我先把初始评分和 changes 数组里的所有数值累加,得到最终的评分结果。然后通过简单的条件判断把这个数值映射到对应的等级上:小于 1000 是入门级,1000 到 1499 是中级,1500 到 1999 是高级,2000 及以上是专业级。题目已经保证评分不会超出合理范围,所以不需要额外处理越界情况。

整个逻辑就是一次线性遍历加求和,再加上几个 if 判断,代码量很少,实现起来几乎没有难度。但要注意准确处理每个区间的边界值,比如正好等于 1000、1500、2000 这些临界点,确保判断逻辑严谨。

题目 2:首尾元音单词中间反转

这题主要围绕字符串处理展开。输入是一个字符串数组,对每个单词有特殊规则:如果单词的第一个字母和最后一个字母都是元音(不区分大小写),就需要把单词中间的部分反转,而首尾字母保持不动;如果不满足这个条件,则单词保持原始形态不变。

举例来说,“apple” 首尾都是元音,中间 “ppl” 反转后变成 “lpp”,最终结果是 “alppe”;“OranGe” 同样处理后得到 “OGnare”;而 “banana” 因为首字母不是元音,就直接保留。

我的处理方式是先创建一个包含所有元音字母的集合(aeiouAEIOU),然后逐个遍历数组中的单词。对于每个单词,检查首尾字符是否都在集合中。如果满足条件且单词长度大于 2,就取出中间子串进行反转,再和首尾字母拼接;否则直接把原单词放入结果数组。

这道题重点在于字符串切片和反转操作,注意处理长度为 1 或 2 的特殊单词,避免出现索引越界。整体时间复杂度很低,属于典型的字符串基础题。

题目 3:循环电池供电计时统计

这题的情景比较有趣:手机还需要使用 t 分钟,但只有几块充满电的电池可用。每块电池都有容量(能用多少分钟)和充电时间。用完一块后需要充电一段时间才能再次使用,你要按顺序循环尝试使用这些电池,如果当前电池还在充电中就跳过,继续找下一块。目标是计算最少需要消耗多少块“满电”电池才能撑完 t 分钟,如果中途出现所有电池都在充电无法使用的死锁情况,则返回 -1。

我采用的是直接模拟的方法。用一个数组记录每块电池的下次可用时间,初始全为 0。当前时间从 0 开始推进,每次找到当前时刻可用的电池,使用它对应的容量更新当前时间,并记录使用次数,同时计算该电池下次充满电的时间。如果某一时刻遍历所有电池都不可用,就直接返回 -1。

虽然模拟过程看起来可能需要多次循环,但题目允许的复杂度范围内完全够用。关键是要处理好循环切换的逻辑(可以使用取模操作)和时间更新的准确性。这类模拟题常见于 OA,平时多练就能快速反应。

题目 4:根据相邻照片重建游览路线

这题描述了一个旅行者访问多个地标但日记丢失,只剩下一系列照片,每张照片记录了两个 consecutively 访问的地标(顺序未知)。所有地标构成一条没有分支的简单路径,要求我们重建出完整的访问顺序(正序或倒序都可以)。

本质上这是一个无向图中重建链的问题。我先构建邻接表来表示地标之间的连接关系,然后统计每个节点的度数,找到一个度为 1 的节点作为起点(如果所有节点度数都是 2,也可以任选一个)。接着用两个指针(prev 和 curr)来模拟行走过程:从起点开始,不断寻找下一个不是前一个节点的邻居,依次把节点加入路径,直到遍历完所有地标。

因为题目保证是一条链,不存在分支或环,所以不需要复杂的 DFS 或 BFS,直接线性模拟就能得到正确结果。这道题实现起来代码量不大,但要仔细处理图的构建和路径输出的方向。

整体感受与备战建议

这次字节 OA 的四道题难度整体属于中低水平,主要考察基础编程能力、字符串操作、过程模拟以及简单图结构的处理。只要平时在 CodeSignal 上多做练习,遇到这些题型时反应速度会快很多。我能快速完成主要得益于之前刷过大量类似原题,如果是第一次接触电池模拟或者路径重建,可能需要多花一些时间梳理逻辑。

给正在准备字节、TikTok 或其他 CodeSignal OA 的同学的几点建议:

  • 重点加强字符串处理、模拟类题目和简单图重建的练习,这些是高频考点。
  • 代码风格要保持清晰,变量命名规范,方便自己快速检查。
  • CodeSignal 平台的时间限制通常比较友好,但一定要重视边界条件和特殊输入的处理。
  • 多积累题库原题,重复概率较高,见过的题能极大提升做题速度和准确率。

总的来说,字节这类 OA 信息差还是比较明显的。光靠临时抱佛脚效果有限,提前系统准备会更有优势。

最后一点心得: 我在准备过程中也发现,有些优化和模拟题如果现场第一次见,思路捋顺就需要不少时间。如果时间紧张或者想进一步提升通过率,可以考虑专业的 OA 辅助支持。Interview Aid 提供实时 OA 辅助服务,在遇到难题时能快速给出思路和实现方案,帮助不少同学顺利过关。

有同样准备字节、TikTok 的朋友欢迎在评论区交流经验,一起加油!

更多推荐