
TikTok / ByteDance OA 四題全AC複盤
早上剛做完一場字節跳動 OA,和 TikTok 一樣在 CodeSignal 平台,70分鐘 4 道題,做了十幾場了,約 15 分鐘搞定,全部都是從題庫抽題。以下是完整思路與程式碼複盤。
考試概況
| 項目 | 詳情 |
|---|---|
| 平台 | CodeSignal |
| 時長 | 70 分鐘 |
| 題數 | 4 道 |
| 難度 | Easy ~ Medium |
| 職位 | Intern / New Grad SDE |
| 結果 | 全AC,約 15 分鐘 |
T1:區間判斷(Interval Lookup)
給你一個初始值和一個陣列,初始值加上陣列總和後,判斷落在哪個區間,返回對應字串。
def interval_lookup(initial, arr, intervals, labels):
total = initial + sum(arr)
for i, (lo, hi) in enumerate(intervals):
if lo <= total < hi:
return labels[i]
return labels[-1]
print(interval_lookup(5, [3,2,1], [(0,5),(5,10),(10,20)], ["low","mid","high"]))
# total=11 → "high"
時間:O(n+k) | 空間:O(1)
- 注意區間端點開閉(
<vs<=) - 資料量大時用二分查找:O(n + log k)
T2:元音單詞翻轉(Vowel Word Flip)
首尾都是元音字母的單詞,中間字元翻轉,首尾保持不變。
def vowel_word_flip(words):
vowels = set('aeiouAEIOU')
result = []
for word in words:
if len(word) >= 2 and word[0] in vowels and word[-1] in vowels:
result.append(word[0] + word[1:-1][::-1] + word[-1])
else:
result.append(word)
return result
print(vowel_word_flip(["abcde", "hello"]))
# abcde → "adcbe",hello 首尾非同為元音 → 不變
時間:O(n·m) | 空間:O(n·m)
- 單字元單詞用
len >= 2特判 - Python 切片
[::-1]一行翻轉
T3:電池調度模擬(Battery Scheduler)
用手機 t 分鐘,有 n 塊電池,各有不同容量和充電速率,輪流使用,求最少需要幾塊滿電電池。
import heapq
def min_batteries(t, capacity, charge_rate):
n = len(capacity)
ready = [(0, i) for i in range(n)]
heapq.heapify(ready)
charging = []
current_time = batteries_used = 0
while current_time < t:
while charging and charging[0][0] <= current_time:
heapq.heappush(ready, heapq.heappop(charging))
if not ready:
return -1
_, idx = heapq.heappop(ready)
batteries_used += 1
use_until = current_time + capacity[idx]
if use_until >= t:
return batteries_used
charge_time = use_until + capacity[idx] / charge_rate[idx]
heapq.heappush(charging, (charge_time, idx))
current_time = use_until
return batteries_used
時間:O(k log n) | 空間:O(n)
- min-heap 追蹤最早可用的已充滿電池
- 充滿時間 = 用完時刻 + 容量 / 充電速率
T4:鏈式遍歷輸出(Chain Traversal)
給一條鏈,從任意端點出發,輸出遍歷完整條鏈的訪問順序。
from collections import defaultdict
def chain_traversal(n, edges):
adj = defaultdict(list)
for u, v in edges:
adj[u].append(v)
adj[v].append(u)
start = next((node for node in range(1, n+1) if len(adj[node]) == 1), 1)
path, prev, curr = [start], None, start
while True:
nxt = next((nb for nb in adj[curr] if nb != prev), None)
if nxt is None:
break
path.append(nxt)
prev, curr = curr, nxt
return path
print(chain_traversal(5, [(1,2),(2,3),(3,4),(4,5)]))
# [1, 2, 3, 4, 5]
時間:O(n) | 空間:O(n)
- 端點 = 度為 1 的節點
- 只需記錄前驅
prev,無需完整 visited 集合 - 不需要 BFS/DFS,while 迴圈模擬即可
四題複雜度彙總
| 題目 | 演算法 | 時間 | 空間 |
|---|---|---|---|
| T1 區間判斷 | if-else | O(n+k) | O(1) |
| T2 元音翻轉 | set + 切片 | O(n·m) | O(n·m) |
| T3 電池調度 | 貪心 + 堆 | O(k log n) | O(n) |
| T4 鏈式遍歷 | 鄰接表 + while | O(n) | O(n) |
常見陷阱
| 題目 | 陷阱 | 解法 |
|---|---|---|
| T1 | 區間端點開閉不清 | 仔細讀題確認 < vs <= |
| T2 | 單字元單詞邊界 | len >= 2 特判 |
| T3 | 充電時間單位混用 | 統一分鐘:use_until + cap/rate |
| T4 | 誤用 visited 導致問題 | 鏈上只需記錄前驅 prev |
CodeSignal OA 應試技巧
TikTok / ByteDance OA 特點
- 平台:CodeSignal,與 Meta OA 同平台
- 時長:70 分鐘,4 道題
- 題目:從題庫隨機抽取,重複率高,多練有奇效
- 難度:Easy ~ Medium,不考 Hard DP 或複雜圖論
- 評分:按測試案例通過數計分,部分分有效
臨場策略
- 先掃一遍 4 題,從最簡單的開始
- T1/T2 通常 5 分鐘內可解,先拿滿分
- T3/T4 需要模擬,注意邊界條件,留 20 分鐘
- 寫完先跑範例,再提交——CodeSignal 有隱藏測試案例
- 時間夠的話,review edge case(空陣列、單節點、t=0 等)
相關 LeetCode 練習
| 題號 | 題目 | 對應題型 |
|---|---|---|
| 1893 | Check if Range is Covered | T1 |
| 557 | Reverse Words in a String III | T2 |
| 1642 | Furthest Building You Can Reach | T3 |
| 1971 | Find if Path Exists in Graph | T4 |
🚀 需要 TikTok / ByteDance OA 輔助?
oavoservice 專注北美大廠 OA/VO 全程輔助,TikTok / ByteDance OA 是我們的高頻服務場景,題庫覆蓋率極高。
立即加 WeChat:Coding0201
- ✅ TikTok OA 即時輔助(螢幕共享 + 即時打字提示)
- ✅ CodeSignal 真實題庫(覆蓋 80%+ 高頻題)
- ✅ 一對一模擬 OA + 詳細回饋
- ✅ VO 面試輔助(演算法 + 系統設計)
📱 WeChat:Coding0201 | 💬 Telegram:@OAVOProxy | 📧 [email protected]