← 返回面經列表

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

2 分鐘

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)

  • 注意區間端點開閉(< 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 或複雜圖論
  • 評分:按測試案例通過數計分,部分分有效

臨場策略

  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

  • ✅ TikTok OA 即時輔助(螢幕共享 + 即時打字提示)
  • ✅ CodeSignal 真實題庫(覆蓋 80%+ 高頻題)
  • ✅ 一對一模擬 OA + 詳細回饋
  • ✅ VO 面試輔助(演算法 + 系統設計)

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


联系方式

Email: [email protected] Telegram: @OAVOProxy