TikTok 面试真题:两天内的近似重复值– VO help – 转码 – 代面试 – 一亩三分地 – 大厂面经 -面试 面经

这次整理的是一道 TikTok Coding 面试真题。题目用了一个很生活化的场景:用户每天观看一集视频,系统要判断是否有两天看过编号足够接近的剧集。读起来不难,真正需要注意的是,时间差和剧集编号差必须同时满足,而且两个条件都是严格小于(<)。

Given an integer array v, where v[i] represents the episode watched on day i, and two integers k and t, determine whether there exist two different days i and j such that:

  1. Day difference: abs(i - j) < k
  2. Episode difference: abs(v[i] - v[j]) < t

Return True if both conditions are satisfied; otherwise, return False.

给定整数数组 v,其中 v[i] 表示第 i 天观看的剧集编号,再给定整数 k 和 t。

判断是否存在两个不同的日期,使日期间隔小于 k,且这两天观看的剧集编号之差的绝对值小于 t。存在就返回 True,否则返回 False。

举个便于理解的例子(非题面原有示例):

v = [2, 7, 9, 2],k = 4,t = 1

结果为 True。

第 0 天和第 3 天的间隔是 3,小于 4;两天观看的编号都是 2,差值为 0,也小于 1。

如果把 k 改成 3,结果就变成 False,因为日期差恰好等于 3,并不满足严格小于。

最直接的方法是枚举两天,逐对检查两个条件,时间复杂度为 O(n²)。这个思路很容易说清楚,但数组较大时没有必要检查所有历史日期。

关键在于 abs(i - j) < k。当我们遍历到第 i 天时,只需要和前面最多 k - 1 天比较。因此可以维护一个滑动窗口,窗口中保留仍然符合日期距离要求的剧集编号。

接下来要解决的是,怎样快速找到一个编号与 v[i] 的差值小于 t。

用有序集合维护窗口,每次查看与当前值最接近的已有元素,就可以避免逐个扫描。这个方案的时间复杂度是 O(n log k),空间复杂度是 O(min(n, k))。

如果进一步优化,也可以使用哈希分桶,在平均情况下做到 O(n) 时间;相邻桶仍然需要实际比较差值。

这题有几个很值得在 Mock Interview 中练熟的细节。首先,两个日期必须不同;其次,k <= 1 或 t <= 0 时不可能满足要求;另外,删除滑动窗口中过期数据时,距离恰好为 k 的日期已经不符合条件。代码里的 < 如果不小心写成 <=,很容易在边界测试中出错。

这道题的难点并不在写出多少行代码,而在于能否迅速把业务描述转换成滑动窗口问题,解释为什么只保留最近的记录,以及清楚说明复杂度和边界条件。

平时刷题时看懂一个解法,与在面试中把解法完整讲明白,还是两回事。

CSOAHELP 长期整理 TikTok、Google、Meta 等公司的真实技术面试题,也提供 Coding、System Design 相关的 Mock Interview 与面试准备辅导。

我们的训练会围绕读题、确认边界、优化思路和表达过程展开,让同学们在遇到这种看似简单、细节很多的题目时,更容易把自己的思考讲清楚。

正在准备 TikTok 或其他北美科技公司的技术面试,可以访问 CSOAHELP 了解真题资料与辅导服务。

我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *