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更近一步。