Adobe SWE OA 面经|两道 HackerRank 题,区间合并和状态转移怎么写稳

Adobe OA 在线笔试代码编辑器与计时器

Adobe 的 OA 先看读题和边界,再看代码是否能跑通。计时开始后别急着把模板铺满:先写清输入约束,确认空数组、重复区间和边界相连时的结果。两道题里,一道是区间合并变体,另一道把二进制串的状态转移藏在操作顺序里。

第一题拿下后,留三分钟把样例改成边界样例再跑一遍,比立刻跳到第二题更值。HackerRank 页面里能看到的测试不多,函数返回值、索引和溢出才是最后容易丢分的地方。

第一题:带优先级的区间合并

题目描述

给出一批 [start, end, priority] 任务。时间重叠时,只保留优先级更高的任务片段;优先级相同则按输入顺序保留。输出按时间排序、彼此不重叠的片段列表。输入本身无序,且端点可以相等。

解题思路

先按 startend 和输入序号排序。维护结果列表的最后一个片段,遇到重叠区间时把交集单独切出来比较优先级,再将左右剩余部分放回待处理序列。实现时不要原地修改正在遍历的列表;把切分后的片段放进临时数组,最后按起点合并相邻且属性相同的段。这样每一次重叠都能明确处理,不会把相接区间误当成交集。

复杂度:排序 O(n log n),切分后的片段数决定后续扫描成本。

第二题:禁止相邻 1 的二进制串计数

题目描述

给定长度 n 和若干被固定的下标,构造长度为 n 的二进制串。任意两个相邻位置不能同时为 1,固定位置必须遵守输入值。返回不同合法构造的数量,结果对给定模数取余。

解题思路

用两个状态记录当前位置结尾为 0 与为 1 的方案数。当前位置固定为 0 时,只更新 dp0 = old0 + old1;固定为 1 时,只能从 old0 转移;未固定时同时做两种转移。开始前先检查相邻固定 1,发现冲突直接返回零。代码里把模运算放在每次加法后,避免语言的整型范围把结果带偏。

复杂度:时间 O(n),空间 O(1)。

做题过程里该留意什么

  • 区间题先写清端点语义。闭区间的 [2, 4][4, 6] 是否冲突,决定比较符是 < 还是 <=
  • DP 题把 n=1、全固定和首位固定为 1 单独跑一遍,能很快发现初始状态写反的问题。
  • 写完函数后用一组乱序输入和一组全部相邻输入检查输出顺序;不要只用题面样例。

FAQ

Adobe OA 只有算法题吗?

岗位和批次不同会有变化。准备时把 HackerRank 的函数式输入、调试输出受限和运行时约束一起练,比只背题名更实用。

第二题为什么不用递归?

递归能表达状态,但线性 DP 更容易控制取模和固定位置。面试时先把两种结尾状态写出来,代码会短很多。

参考来源

关于 CSINTERVIEWHELP

无论是 OA 题型解析、OA 辅导、VO 辅助、VO 模拟面试、VO 面试陪练还是系统设计辅助,CSINTERVIEWHELP 都提供按岗位定制的练习和反馈:查看服务