
HRT 的 SWE OA 节奏快,70 分钟里切四道题,最怕的是读完题就直接开写。题目本身不靠冷门套路取胜,状态有没有定义清楚、分支有没有收全,往往更拉开差距。第一题要尽快建立可跑版本,后面三题每题都留两三分钟重读样例和约束。
第一题:Debugger 状态模拟
题目描述
实现一个小型调试器。输入给出代码行数、断点集合和执行命令;命令会单步运行、跳转到指定行、添加或删除断点。每次命令执行后返回当前行号、是否暂停,以及下一步允许的操作。
解题思路
把当前行号、断点集合和运行状态拆开存。断点用哈希集合,查询是 O(1);每条命令先校验目标行是否落在合法范围,再更新行号,最后检查新位置是否命中断点。jump 与 step 不能共用一段含糊的分支,否则跳到最后一行和越过最后一行会混在一起。测试至少写命中断点、删除当前断点、跳到边界和连续 step 四组。
第二题:Reversi 棋盘落子
题目描述
给定 N×N 棋盘和一连串落子操作,每次落子后要沿八个方向翻转被夹住的对方棋子,最后输出棋盘。非法落子要原样忽略,不能改变当前局面。
解题思路
用八个方向向量逐方向扫描。每个方向先连续收集对方棋子坐标,直到碰到己方棋子才提交翻转;先改棋盘再判断终点会把不完整的链条也翻掉。把“在边界内”“对手棋子”“己方棋子”分别封装,小循环就不会被坐标判断淹没。扫描一条方向是 O(N),单次落子为 O(N)。
第三题:N 叉树的前序合并
题目描述
输入两棵 N 叉树,节点都有 ID 与任意个子节点。按前序遍历输出合并结果:相同 ID 的节点合并属性,子节点顺序保留首次出现的位置,没有配对的节点继续保留。
解题思路
先为第二棵树建立 id -> node 索引,再 DFS 第一棵树。访问一个节点时合并自身属性,然后按原顺序递归子节点;第二棵树未被访问到的节点放入补充列表,最后附到约定位置。递归函数应返回新节点而不是原地反复改输入,这样重复 ID、空子节点和共享对象更容易测试。树总节点数为 n 时,时间和空间都为 O(n)。
第四题:四进制受限数字计数
题目描述
给定整数 n,统计不超过 n 且四进制表示只含 0 和 1 的正整数个数。n 可达到 64 位范围,逐个枚举会超时。
解题思路
把 n 转成四进制,从高位到低位做数位 DP。状态只需记录当前位置和前缀是否已经小于 n;当前位只能选择 0 或 1,选择值小于 n 的当前位时,后续直接进入自由状态。用记忆化缓存 (pos, tight),并单独处理 0 是否计入答案。这个题先写三组小值手算表,再验证临界位是 0、1、2、3 的分支。
做题过程
HRT 这类 OA 不适合一题卡十几分钟。先把输入输出、异常规则和数据范围写在草稿上;第一题跑通后立刻进入下一题。剩余时间优先回查数组下标、空集合和最后一个元素,别把隐藏测试交给运气。关于线上测试与后续技术轮的题目范围,可对照 HRT SWE 候选人流程记录 做限时演练。
备考建议
连续四题训练时,把计时器设成 70 分钟。模拟题里至少放一道规则很长的状态题和一道树题,练习把条件写成小函数。提交前先看一遍整数范围与递归深度;在共享编辑器或 OA 里,这两个细节往往比换算法更值得花时间。
FAQ
HRT SWE OA 要优先复习什么?
状态模拟、DFS、哈希索引与数位 DP 都值得过一遍。更重要的是限时下读清约束,尤其是“是否合法”“是否原地修改”“相等时怎么算”。
四道题来不及写完怎么办?
先保证已完成题目能过边界,再挑最接近完成的一题补全。不要为了最后一题把前面已经可提交的代码改得不稳定。
参考来源
关于 CSINTERVIEWHELP
进 VO 之前,可以找 CSINTERVIEWHELP 做实时面试助攻和备考辅导。导师来自一线大厂资深工程师和面试官,对 HRT 这类重视代码准确度的公司的面试沟通方式很熟悉。无论是 OA 题型解析、OA 辅导、VO 辅助、VO 模拟面试、VO 面试陪练还是系统设计辅助,都可以获得更有针对性的准备方案:CSINTERVIEWHELP · 服务详情
