← 返回博客列表 TikTok OA 2026 真题解析:110分7题全攻略|一亩三分地高频面经
TikTok

TikTok OA 2026 真题解析:110分7题全攻略|一亩三分地高频面经

2026-05-12

TikTok(字节跳动海外版)的 OA 以题量大、场景化著称——110 分 7 道题,所有岗位和地区使用相同题目。题目难度中等,但时间管理是关键。本文基于一亩三分地最新面经,系统拆解 TikTok OA 的核心题型与解题策略。

TikTok OA 概览

维度 详情
平台 自研平台
时长 120 分钟
题量 7 道(总分 110 分)
难度 Easy-Medium
考察重点 贪心、DP、BFS/DFS、二分搜索、模拟

题型一:视频反馈优化(Video Feedback Optimization)

题目描述

给定一个二进制数组 videoFeedback,其中 1 表示正面反馈,0 表示负面反馈。创作者可以选择一个连续区间 [l, r] 保持不变,区间外的所有值翻转(0→1, 1→0)。求翻转后最大的正面反馈数(即 1 的数量)。

解题思路

翻转区间外等价于:总长度 - 区间内0的数量 - 区间外1的数量。可以转化为求最大子数组和问题。

def max_positive_feedback(feedback):
    n = len(feedback)
    total_ones = sum(feedback)
    total_zeros = n - total_ones
    
    # 翻转后的1的数量 = 区间外的0变成1 + 区间内原本的1
    # = (total_zeros - 区间内0的数量) + 区间内1的数量
    # = total_zeros + 区间内(1的数量 - 0的数量)
    # 等价于最大化区间内 sum(2*x - 1 for x in subarray)
    
    transformed = [2 * x - 1 for x in feedback]
    
    # Kadane's algorithm 求最大子数组和
    max_sum = float('-inf')
    current_sum = 0
    
    for val in transformed:
        current_sum = max(val, current_sum + val)
        max_sum = max(max_sum, current_sum)
    
    return total_zeros + max(0, max_sum)

时间复杂度:O(n)
空间复杂度:O(n)

题型二:服务器延迟优化(Server Delay Optimization)

题目描述

数据包通过 n 个服务器(编号 1 到 n)传输,每个服务器有延迟 delay[i]。可以选择跳过最多 k 个服务器(但不能跳过第一个和最后一个)。求最小总延迟。

解题思路

这是一个DP + 滑动窗口问题:

def min_total_delay(delays, k):
    n = len(delays)
    if n <= k + 2:
        return delays[0] + delays[-1]
    
    # dp[i][j] = 到达第i个服务器,已跳过j个的最小延迟
    dp = [[float('inf')] * (k + 1) for _ in range(n)]
    dp[0][0] = delays[0]
    
    for i in range(1, n):
        for j in range(k + 1):
            # 不跳过第i个服务器
            dp[i][j] = min(dp[i][j], dp[i-1][j] + delays[i])
            
            # 跳过第i个服务器(如果不是首尾)
            if j > 0 and i != n - 1:
                dp[i][j] = min(dp[i][j], dp[i-1][j-1])
    
    return min(dp[n-1])

题型三:病毒传播最小化(Viral Campaign Minimum Seeds)

题目描述

社交网络中有 n 个用户,给定关注关系图。如果一个用户的所有关注者中超过一半已经接受了某个趋势,该用户也会接受。求最少需要初始投放多少个用户,才能让所有用户最终都接受该趋势。

解题思路

这是一个拓扑排序 + 贪心问题:

from collections import defaultdict, deque

def min_seed_users(n, follow_edges):
    """
    follow_edges: [(a, b)] 表示 a 关注 b
    如果用户的关注者中超过一半已接受,该用户也接受
    """
    followers = defaultdict(set)  # followers[u] = 关注u的人
    following = defaultdict(set)  # following[u] = u关注的人
    
    for a, b in follow_edges:
        following[a].add(b)
        followers[b].add(a)
    
    # 入度为0的节点(没有关注任何人的)必须被初始投放
    seeds = set()
    
    # 找到没有被任何人关注的节点(无法被影响的)
    for u in range(n):
        if not followers[u]:
            seeds.add(u)
    
    # BFS 模拟传播
    activated = set(seeds)
    queue = deque(seeds)
    
    while queue:
        u = queue.popleft()
        for v in followers[u]:
            if v not in activated:
                # 检查v的关注者中已激活的比例
                activated_following = sum(1 for f in following[v] if f in activated)
                if activated_following > len(following[v]) // 2:
                    activated.add(v)
                    queue.append(v)
    
    # 如果还有未激活的节点,需要额外种子
    remaining = set(range(n)) - activated
    while remaining:
        # 贪心选择能激活最多节点的
        best = max(remaining, key=lambda u: len(followers[u] & remaining))
        seeds.add(best)
        activated.add(best)
        queue = deque([best])
        
        while queue:
            u = queue.popleft()
            for v in followers[u]:
                if v not in activated:
                    activated_following = sum(1 for f in following[v] if f in activated)
                    if activated_following > len(following[v]) // 2:
                        activated.add(v)
                        queue.append(v)
        
        remaining = set(range(n)) - activated
    
    return len(seeds)

题型四:Relevance Score 调整(二分搜索)

题目描述

给定一组 relevance scores,每次调整可以将任意一个 score 减少 x。在最多 maxAdjustments 次调整后,使所有 scores 变为非正数。求最小的 x。

def min_adjustment_value(scores, max_adjustments):
    def can_achieve(x):
        adjustments_needed = 0
        for s in scores:
            if s > 0:
                adjustments_needed += (s + x - 1) // x
        return adjustments_needed <= max_adjustments
    
    left, right = 1, max(scores)
    
    while left < right:
        mid = (left + right) // 2
        if can_achieve(mid):
            right = mid
        else:
            left = mid + 1
    
    return left

时间复杂度:O(n * log(max_score))

时间管理策略

题目类型 建议时间 分值
Easy 题(1-2题) 10-15 分钟/题 10-15 分
Medium 题(3-4题) 15-20 分钟/题 15-20 分
Hard 题(1-2题) 20-25 分钟/题 20-25 分

建议先做简单题拿稳分数,再攻克难题。

TikTok OA 防作弊机制


FAQ

TikTok OA 所有岗位题目一样吗?

是的,TikTok OA 对所有岗位和地区使用相同的题目集(110分7题),不区分 SDE、MLE 或 Data 岗位。

TikTok OA 的通过分数线是多少?

根据一亩三分地面经,通常需要达到 80-90 分以上才能进入下一轮。满分 110 分,建议至少做对 5-6 题。

TikTok OA 和字节跳动国内笔试有什么区别?

TikTok OA 题目难度略低于字节国内笔试,但题量更大(7题 vs 4题)。时间管理更为关键。

TikTok OA 之后的面试流程是什么?

通过 OA 后通常有 2-3 轮技术面试(算法 + 系统设计),然后是 Hiring Manager 面试。从 OA 到 offer 通常 4-6 周。

TikTok OA 可以用什么语言?

支持 Python、C++、Java、JavaScript 等主流语言。推荐使用 Python,因为题量大需要快速编码。


正在准备 TikTok OA?

oavoservice 提供专业的 TikTok/字节跳动 OA/VO 辅助服务,覆盖全球各地区的面试。我们的团队熟悉 TikTok 的题目风格和评分标准。

👉 立即添加微信:Coding0201获取真题与辅助方案


联系方式

Email: [email protected]
Telegram: @OAVOProxy