← 返回博客列表
TikTok

TikTok / ByteDance OA 四題全AC複盤:區間判斷 + 元音翻轉 + 電池調度 + 鏈式遍歷

2026-03-18

TikTok / ByteDance OA 四題全AC複盤

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)


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)


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)


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)


四題複雜度彙總

題目 演算法 時間 空間
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 特點

臨場策略

  1. 先掃一遍 4 題,從最簡單的開始
  2. T1/T2 通常 5 分鐘內可解,先拿滿分
  3. T3/T4 需要模擬,注意邊界條件,留 20 分鐘
  4. 寫完先跑範例,再提交——CodeSignal 有隱藏測試案例
  5. 時間夠的話,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

📱 WeChat:Coding0201 | 💬 Telegram:@OAVOProxy | 📧 [email protected]