第1轮(书面轮):主要由4个部分组成。
- 调试回合: 20分钟调试7个代码
- 编码测试: 70 分钟内 2 道编码问题
- 性格评估:没有时间限制(理想情况下需要 15-20 分钟)
- 推理能力部分: 35 分钟 24 题
在编码部分有2个问题:
- 给定两个排序的链表。将它们合并为一个并返回头指针。
- 在图中查找关键连接(桥)。
两道题全部通关者,进一步入选面试。 (清除 37/200)
第二轮(技术面试):从正式介绍开始。面试官说这一轮会持续一个小时,会问2个问题。所以请确保在 30 分钟内单独完成每个问题的代码。为编写代码提供了代码共享链接。
面试官真的很友好,期待着最优化的解决方案。面试官还在各种方法中提供了很多帮助,并要求提供这些方法的边缘案例。
问题 1:给定特定产品的产品 ID 和销售额,设计一个数据结构来显示按销售额排名前 N 的趋势产品,并制作一个更新销售额值的函数。
解决方案:使用修改后的最大堆。制作结构体,实现maxHeapify、extractMax、增减键等功能。在最大堆中,数组应该是 pair
问题2:在二叉树中实现锁定。一个二叉树节点只有在它的所有后代或祖先都没有被锁定时才能被锁定或解锁。为了达到优化的解决方案,您可以更改树的结构。
面试官在这个过程中提供了帮助,并给出了 1-2 个提示,我可以理解。
链接: https : //www.dailycodingproblem.com/blog/lockable-binary-trees/
这轮不是淘汰赛,所有人都进入了第三轮。
第三轮(技术面试):面试官让我做自我介绍,问项目的情况。随后进行了一些交叉提问,然后面试官告诉在 1 小时的时间跨度内将再次提出 2 个编码问题。确保不要超过时间。
问题 1:给定一个字符串和一个整数 k。一组 k 个相同的字符将被删除任意次,直到不再可能。
解决方案:使用一个堆栈,然后继续将要添加的字符与堆栈顶部进行比较(k次)。时间复杂度:O(nk)
面试官要求进一步优化,在栈中使用pair
(链接:https://www.geeksforgeeks.org/reduce-the-string-by-removing-k-consecutive-identical-characters/)
问题 2:给定一个 2D 网格,包含多人、开放点和封锁位置。一个人可以朝四个方向(上、下、左、右)移动。找到每个开放点与其最近的人的最小距离。如果任何开放点不可达,则在其中存储 -1。
解决方案:考虑一个队列并将每个人的坐标存储在该队列中。之后创建一个相同维度的距离数组(初始化为 INT_MAX)。对每个人应用 BFS,并继续为网格中的所有点找到可能的最小值。面试官帮助达成了这种方法。
最后被告知一轮面试已经结束,很快就会出结果。
结论:精选🙂