📜  微软 FTE 面试体验

📅  最后修改于: 2021-11-18 01:06:36             🧑  作者: Mango

编码回合(60-65 分钟): 2 个问题

  1. 给定一个数组,选择最大的子集,使得对所有元素的操作都不为零。
  2. 给定一个字符串和一个与字符串的每个索引相关联的成本数组。从字符串删除元素,使得没有两个相邻字符相同,并找到构建该字符串的最小成本。

在编码回合后,有 40 人入围面试。

所有的面试轮次都是在 Microsoft Teams 上进行的

面试第一轮(中):面试官很有帮助。首先,他自我介绍并告诉我他在微软的工作,然后我被要求做自我介绍。

然后他从一个简单的问题开始:

  1. 给定一个由 n 个整数组成的数组,所有数字都是唯一的,其中一个除外。
    • 如果 n 是偶数,则重复数重复 n/2 次
    • 如果 n 是奇数,则重复数重复 (n-1)/2 或 (n+1)/2 次
    • 重复数在数组中与自身不相邻

    编写一个程序来在不使用额外空间的情况下找到重复的数字

    我用 O(n) 解决了这个问题。然后他让我在 O(1) 中解决它,我也做了同样的事情,他对这个解决方案很满意。

  2. 运输材料

    有些材料需要从A地运到B地。为了运送这些材料,已经提供了两辆卡车。假设每辆卡车有足够的容量一次将所有材料从 A 地运到 B 地。不幸的是,某些材料在与其他材料堆放在同一辆卡车上时受到限制。不能搭配的材料成对提供。

    编写一个程序,找出是否可以一次性使用两辆卡车发送所有材料。

    此外,如果可以一次性发送,请列出每辆卡车正在发送的材料。

    请注意,只有2辆卡车。

    阅读问题,我只是告诉他,我正在感受以材料为节点和限制对为边的图实现。

    然后我们只需要检查图是否是二部图。

    他问我复杂度,我告诉我,因为我们将使用 DFS,时间复杂度为 O(n+m),n 是节点,m 是边

面试官很高兴,因为我在阅读问题 1-2 分钟后就给出了解决方案。

面试第二轮(中):经过我的介绍,他开始提问

  1. 首先,他向我询问了虚拟内存及其优势。

    我回答正确,然后他进一步问了一个例子,说明我们如何在具有 1GB RAM 的设备上运行 1.5GB 游戏。

    答案是“是”,原因是虚拟内存优势,但由于页面错误可能会出现滞后。

    然后他问了我一个编码问题。

  2. 二叉树的层序遍历,但以逆形式,即从最后一层到第一层。
    Eg:
         1
       2    3
     4  5 6   7
    
    Output:
    4 5 6 7
    2 3
    1

    他希望我使用相同的数据结构。我们可以使用 Queue 运行 BFS,为了以逆形式存储节点,我们可以使用堆栈

  3. 这一轮的最后一个问题是字符串交织问题(标准 DP 问题)。我被告知要编写 DP 关系和表格方法。

    我正确地向他解释了,他对最终的解决方案很满意。

面试第三轮(中):这轮/最后一轮很容易,但面试官很严格。面试官很有帮助,但他希望我以正确的格式高效地编写代码,没有冗余。首先,他问我今天过得怎么样,远程学习进展如何。

编码问题:

  1. 在 BST 中找到 2 个节点的最小共同祖先。

    简单的问题,但有很多条件我们需要和面试官澄清。

    如果两个节点相同呢?在这种情况下,返回该节点的父节点

    如果两个节点相同但节点是根节点怎么办?在这种情况下返回 NULL

    如果一个节点是另一个节点的父节点怎么办?返回其他节点的父节点的父节点

    通过适当的讨论,我能够正确编码。

最终裁决:选择

小贴士:当被问到面试官时,要自信并提出问题。