ByteDance OA 题库有一定规模,但题型模式相对固定。只要你提前熟悉常见的套路,考试时完全可以前两题十几分钟搞定,全程 40 分钟内稳稳拿下 4 题。本文整理了我最近一场 ByteDance OA 的四道真实题目,附上详细解题思路和代码示例,希望帮到正在准备字节海外岗、TikTok、国内秋招或暑期实习的同学,提前熟悉节奏,少踩坑。

ByteDance OA 概览
平台:CodeSignal
时长:70 分钟
题量:4 道
难度:中等偏下,熟悉套路后可以快速完成
T1:用户评级与等级
题意简述
给定一个初始评分 initial 和一个变化数组 changes,依次累加后得到最终评分,判断评分落在哪个等级区间。
思路
- 直接对
initial和changes求和 - 用
if-else判断区间:< 1000→"beginner"1000–1499→"intermediate"1500–1999→"advanced"≥ 2000→"pro"
示例
def solution(initial, changes):
total = initial + sum(changes)
if total < 1000:
return "beginner"
elif total < 1500:
return "intermediate"
elif total < 2000:
return "advanced"
else:
return "pro"
T2:单词变换
题意简述
对每个单词:
- 如果首字母和尾字母都是元音(大小写敏感,
aeiouAEIOU),则保留首尾,反转中间部分,并将中间部分的首字母大写,其余小写。 - 否则保持不变。
思路
- 定义元音集合
- 判断
s[0] in vowels and s[-1] in vowels - 中间部分:
s[1:-1]→ 反转 → 首字母大写,其余小写 → 拼接
示例
def solution(text):
vowels = set('aeiouAEIOU')
res = []
for s in text:
if s[0] in vowels and s[-1] in vowels:
mid = s[1:-1][::-1]
if mid:
mid = mid[0].upper() + mid[1:].lower()
s = s[0] + mid + s[-1]
res.append(s)
return res
T3:手机电池使用
题意简述
要用手机 t 分钟,有 n 块电池,每块有:
capacity[i]:可用分钟数recharge[i]:耗尽后需要充电的分钟数
规则:
- 按顺序循环使用电池
- 当前电池用完 → 切换到下一块
- 如果下一块还在充电,则继续往后找
- 如果所有电池都在充电 → 返回
-1 - 统计完整用完的电池数量
思路
- 模拟时间推进
- 维护每块电池的可用时间点
- 当需要换电池时,按顺序找第一个已充满的
- 如果找不到 →
-1
示例
def solution(t, capacity, recharge):
n = len(capacity)
ready_time = [0] * n # 每块电池何时可用
used_count = 0
time = 0
idx = 0
while time < t:
# 找当前可用的电池
found = -1
for _ in range(n):
if ready_time[idx] <= time:
found = idx
break
idx = (idx + 1) % n
if found == -1:
return -1
# 使用这块电池
cap = capacity[found]
ready_time[found] = time + cap + recharge[found]
time += cap
used_count += 1
idx = (found + 1) % n
return used_count
T4:旅行路线重建
题意简述
给出一系列照片,每张照片 [a, b] 表示 a 和 b 在旅行中是连续访问的(顺序未知)。
要求重建完整的访问顺序(所有地标出现一次,且相邻对都有照片)。
思路
- 这是一个链结构(每个节点度 ≤ 2)
- 建图:邻接表
- 找到链的端点(度为 1 的节点)
- 从任意端点开始遍历,不断走向未访问的邻居
示例
def solution(travelPhotos):
from collections import defaultdict, deque
graph = defaultdict(list)
degree = defaultdict(int)
for a, b in travelPhotos:
graph[a].append(b)
graph[b].append(a)
degree[a] += 1
degree[b] += 1
# 找端点
start = None
for node in graph:
if degree[node] == 1:
start = node
break
# 遍历
order = []
prev = None
cur = start
while cur is not None:
order.append(cur)
nxt = None
for nei in graph[cur]:
if nei != prev:
nxt = nei
break
prev, cur = cur, nxt
return order
需要 CodeSignal OA 帮助?
如果你正在准备字节跳动或其他科技公司的CodeSignal在线笔试,你并不孤单。很多求职者都发现:70分钟4道题的节奏很紧,尤其是遇到不熟悉的题型变种时,很容易卡住。
ProgramHelp 可以为你提供:
- 真实OA题库 – 涵盖ByteDance、TikTok、Amazon、Meta等公司的高频真题
- 解题思路 + 代码模板 – 快速掌握每类题型的核心解法,不再死磕
- 一对一辅导 – 针对你的薄弱环节专项提升
- 紧急辅助 – OA助攻 · 无痕支持 ,CodeSignal | HackerRank | LeetCode,字节 / TikTok / Amazon / Meta
用最少的时间,拿到最高的OA分数。
顺利进入下一轮面试,离Offer更近一步。
End of text