目录
正在加载目录...

Tiktok Intern OA |CodeSignal 70 分钟四题熟了就是十分钟的事

Tiktok Intern OA 又发了一批,我这场点进去就很眼熟,感觉题面见过类似的,下手快了不少:前两题偏 Easy,第三题矩阵实现,第四题带更新的计数思维题。CodeSignal 的题库复用率不低,老题仍可能原题出现。这场第二、第四题之前就见过类似写法。

Tiktok Intern OA |CodeSignal 70 分钟四题熟了就是十分钟的事

Question 1:矩阵 k-border 排序后顺时针写回

Tiktok Intern OA |CodeSignal 70 分钟四题熟了就是十分钟的事

题意

给一个 n×n 矩阵,最外圈叫 0-border,去掉最外圈之后新的外圈叫 1-border,以此类推,一共到 floor((n-1)/2) 层。对每一圈:把这一圈的元素取出来、排序、从左上角开始按顺时针放回原位。题面允许 O(n³),不用卡最优。

思路

按层做,每一层算出 top / bottom / left / right 四条边的边界,按”上→右→下→左”的顺序收集元素,sort 之后再按同样顺序写回。

四个角只在一侧计入,不重复取。具体来说:上行取 [left, right],右列取 [top+1, bottom],下行取 [right-1, left-1](反向),左列取 [bottom-1, top](反向)。

最容易翻车的地方就是下行和左列都是反向遍历,顺序别搞混——建议写一个 helper 先验证单层的取法对不对,再套外层循环。

Question 2:拆房子后还剩几段

Tiktok Intern OA |CodeSignal 70 分钟四题熟了就是十分钟的事

题意

数轴上有若干房子,位置在 houses 里互不相同。queries 是按顺序给出的拆除位置,每次拆完问当前还剩多少个”段”。段的定义:连续相邻的房子形成一段,单独一栋也算一段。

示例:houses = [1,2,3,6,7,9],queries = [6,3,7,2,9,1],输出 [3,3,2,2,1,0]。

思路

正着维护连通段数。用一个集合存当前还在的房子,拆 x 的时候看左右邻居:

左右都在——x 在某段中间,拆掉之后左右各成一段,段数 +1。

只有一侧有邻居——x 在某段的端点,拆掉之后那段缩短但不分裂,段数不变。

左右都没有——x 是孤立的一栋,拆掉直接少一段,段数 -1。

初始化时先根据全部 houses 算好初始段数(相邻元素之差 > 1 就是一个分界),再按 queries 顺序逐个更新、逐次记录。

这题最容易漏的坑:初始段数没算对。建议先排序 houses,扫一遍数相邻差 > 1 的地方有几个,初始段数 = 1 + 这些分界的数量。

Question 3:矩阵 k-border 顺时针排序

Tiktok Intern OA |CodeSignal 70 分钟四题熟了就是十分钟的事

题意

给定 n × m 矩阵。定义 0-border 为最外圈(最左列、最右列、最上行、最下行的并集);去掉 0-border 后,新的最外圈是 1-border,以此类推直到中心。

对每个合法的 k,将该 k-border 上的元素排序后,再按顺时针、从左上角开始写回该圈。

题面允许时间复杂度不超过 O(nm(n+m))O(n \cdot m \cdot (n+m))O(n⋅m⋅(n+m))。

解题思路

  1. 计算层数:大约 min(n,m)//2 层。
  2. 对每一层 k:按顺时针顺序收集该圈元素(上 → 右 → 下 → 左,注意拐角不要重复)。
  3. 将收集到的列表排序。
  4. 再按同样顺时针顺序写回矩阵。

实现时注意:当某一层退化成一行或一列时,不要重复遍历边;下标与 k 的对应关系要和题图一致。

Question 4:带更新的两数之和查询

Tiktok Intern OA |CodeSignal 70 分钟四题熟了就是十分钟的事

题意

给定数组 a、b,以及若干 queries。每条查询两种形式:

  • [0, i, x]:把 a[i] 赋值为 x
  • [1, x]:统计有多少对下标 (i, j) 满足 a[i] + b[j] = x

按顺序处理所有查询,返回所有类型 [1, x] 的结果组成的数组。

示例:a=[3,4],b=[1,2,3],queries=[[1,5],[0,0,1],[1,5]] → [2,1]。

解题思路

维护 b 的频次表(哈希表:值 → 出现次数)。 对类型 [1, x]:遍历当前 a 的每个元素 v,累加 freq[x – v],即为答案。 对类型 [0, i, x]:只需改 a[i],b 的频次表不变。

若 a 很长、查询很多,遍历 a 可能偏慢,可再维护 a 的频次,更新时对 a 的旧值减 1、新值加 1,查询时枚举较短的一边;题面规模通常允许简单写法先过。

注意:只返回类型 [1, x] 的结果,更新操作不进答案数组。

说一句

TT 的 OA 时间紧、题有梯度,建议先扫全卷再动手,简单的先拿分,别卡在一道细节上。有在备考 TikTok 或其他公司 OA 的同学,可以来找我们聊。 InterviewShow 整理了 TikTok 和 CodeSignal 同类公司的高频题库,按目标公司给针对性刷题清单,一对一跟着走。有需要的来聊。

END