编码回合(60-65 分钟): 2 个问题
- 给定一个数组,选择最大的子集,使得对所有元素的操作都不为零。
- 给定一个字符串和一个与字符串的每个索引相关联的成本数组。从字符串删除元素,使得没有两个相邻字符相同,并找到构建该字符串的最小成本。
在编码回合后,有 40 人入围面试。
所有的面试轮次都是在 Microsoft Teams 上进行的
面试第一轮(中):面试官很有帮助。首先,他自我介绍并告诉我他在微软的工作,然后我被要求做自我介绍。
然后他从一个简单的问题开始:
- 给定一个由 n 个整数组成的数组,所有数字都是唯一的,其中一个除外。
- 如果 n 是偶数,则重复数重复 n/2 次
- 如果 n 是奇数,则重复数重复 (n-1)/2 或 (n+1)/2 次
- 重复数在数组中与自身不相邻
编写一个程序来在不使用额外空间的情况下找到重复的数字
我用 O(n) 解决了这个问题。然后他让我在 O(1) 中解决它,我也做了同样的事情,他对这个解决方案很满意。
- 运输材料
有些材料需要从A地运到B地。为了运送这些材料,已经提供了两辆卡车。假设每辆卡车有足够的容量一次将所有材料从 A 地运到 B 地。不幸的是,某些材料在与其他材料堆放在同一辆卡车上时受到限制。不能搭配的材料成对提供。
编写一个程序,找出是否可以一次性使用两辆卡车发送所有材料。
此外,如果可以一次性发送,请列出每辆卡车正在发送的材料。
请注意,只有2辆卡车。
阅读问题,我只是告诉他,我正在感受以材料为节点和限制对为边的图实现。
然后我们只需要检查图是否是二部图。
他问我复杂度,我告诉我,因为我们将使用 DFS,时间复杂度为 O(n+m),n 是节点,m 是边
面试官很高兴,因为我在阅读问题 1-2 分钟后就给出了解决方案。
面试第二轮(中):经过我的介绍,他开始提问
- 首先,他向我询问了虚拟内存及其优势。
我回答正确,然后他进一步问了一个例子,说明我们如何在具有 1GB RAM 的设备上运行 1.5GB 游戏。
答案是“是”,原因是虚拟内存优势,但由于页面错误可能会出现滞后。
然后他问了我一个编码问题。
- 二叉树的层序遍历,但以逆形式,即从最后一层到第一层。
Eg: 1 2 3 4 5 6 7 Output: 4 5 6 7 2 3 1
他希望我使用相同的数据结构。我们可以使用 Queue 运行 BFS,为了以逆形式存储节点,我们可以使用堆栈
- 这一轮的最后一个问题是字符串交织问题(标准 DP 问题)。我被告知要编写 DP 关系和表格方法。
我正确地向他解释了,他对最终的解决方案很满意。
面试第三轮(中):这轮/最后一轮很容易,但面试官很严格。面试官很有帮助,但他希望我以正确的格式高效地编写代码,没有冗余。首先,他问我今天过得怎么样,远程学习进展如何。
编码问题:
- 在 BST 中找到 2 个节点的最小共同祖先。
简单的问题,但有很多条件我们需要和面试官澄清。
如果两个节点相同呢?在这种情况下,返回该节点的父节点
如果两个节点相同但节点是根节点怎么办?在这种情况下返回 NULL
如果一个节点是另一个节点的父节点怎么办?返回其他节点的父节点的父节点
通过适当的讨论,我能够正确编码。
最终裁决:选择
小贴士:当被问到面试官时,要自信并提出问题。