Robinhood SWE OA 面经|75 分钟四题,怎样把时间留给后两题

Robinhood OA 面经配图

Robinhood 的线上测评把四道算法题压进 75 分钟。真正难的不是开头那题能不能做出来,而是能否尽早判断一条思路会不会把自己拖进实现细节里。先拿到稳定分,再为后两题留出测试时间,节奏比硬扛一道题更重要。

四类高压练习分别覆盖窗口、账本、图搜索和事件状态。每题都从能通过样例的版本起步,再补规模追问和边界输入;这比一上来追最复杂的写法更稳。

第一题:价格变动的最长可交易窗口

题目描述

给定按分钟到达的价格数组与阈值 k,找出最长连续窗口,使窗口内最高价和最低价之差不超过 k。数据量可到 200,000,返回窗口左右端点。

解题思路

维护一个递增双端队列和一个递减双端队列,队首分别保存当前窗口的最小值和最大值下标。右指针每前进一步就更新两个队列;最大最小之差超过 k 时,左指针收缩并弹掉过期下标。窗口合法后更新答案,始终保留长度更长、起点更小的区间。复杂度:时间 O(n),空间 O(n)。

第二题:成交记录的账户净额

题目描述

输入多条 (from, to, amount) 成交记录,输出每个账户的净额;再返回净额绝对值最大的前 K 个账户。相同账户会多次出现,金额为整数分。

解题思路

哈希表记录账户余额,付款方减去金额、收款方加上金额。遍历结束后用大小为 K 的小顶堆保留绝对值最大的账户;堆顶被新账户超过时替换。排序规则要提前写死:绝对值相同按账户 ID 升序,输出才可复现。测试要覆盖自转账、金额为零、K 大于账户数和重复记录。复杂度:时间 O(n log K),空间 O(u + K)。

第三题:资金划转的最少跳数

题目描述

给定账户之间允许直接转账的关系,以及起始账户、目标账户和一组冻结账户,求不经过冻结账户的最少转账次数;没有可行路径时返回 -1

解题思路

把账户关系建成邻接表,从起始账户做 BFS。入队时就标记访问,避免环上的节点重复进入队列;冻结账户在构图后单独过滤,起点或终点被冻结直接结束。若面试官把每条边加上手续费,切换为 Dijkstra,并说明权重非负才能这样做。复杂度:无权图时间 O(V + E),空间 O(V + E)。

第四题:订单撤销后的余额回放

题目描述

系统按时间顺序接收入金、出金和撤销事件。撤销事件指向此前某条成功事件,且同一事件只能撤销一次。要求逐条输出当前余额,并找出首次低于风险线的时间点。

解题思路

用事件 ID 映射保存原始金额和生效状态,余额只在首次生效或首次撤销时更新。撤销一条入金就减去原金额,撤销一条出金就加回原金额;重复撤销保持余额不变。风险线检测放在每次状态变化之后,第一次命中后保留时间戳,不被后续恢复覆盖。这里最容易漏的是撤销未知 ID 和撤销尚未生效事件,两个分支都要明确返回错误码。

做题时的时间分配

  • 前 12 分钟先读完四题,标出数据范围、返回值和最短实现路径。
  • 第一题超过 18 分钟仍没有核心循环,就写下当前状态并切换,别让一道题吞掉整场。
  • 最后 8 分钟只做反例:空输入、重复事件、极端阈值和整数边界。

在进入后续轮次前,也可以看看这份 Robinhood 候选人流程记录:OA 之后还会继续考察算法表达和项目讨论,所以代码写完后要留出说明取舍的时间。

FAQ

Robinhood OA 的四题都要一次提交最优解吗?

先让正确版本覆盖清楚的输入,再升级最影响复杂度的部分。能解释为什么选择双端队列、堆或 BFS,比只交出一段没有边界处理的代码更有说服力。

遇到题意不清时怎么处理?

把你采用的输入约束写成注释,并针对两种分支各举一个例子。线上评测没有追问机会,明确假设能减少接口和返回值上的失分。

参考来源

关于 CSINTERVIEWHELP

无论是 OA 题型解析、OA 辅导、VO 辅助、VO 模拟面试、VO 面试陪练还是系统设计辅助,CSINTERVIEWHELP 都可以结合目标公司的流程陪你把题目拆透、把项目故事讲顺。查看服务