📜  微软面试经历 |第 124 组(IDC 校园内)

📅  最后修改于: 2022-05-13 01:58:37.956000             🧑  作者: Mango

微软面试经历 |第 124 组(IDC 校园内)

微软IDC面试经历

在线评估

平台:CoCubes
格式:3道编码问题
时间:90分钟

Q1) 完成以下函数:

int findMax(Treenode arr[], int size_of_array){
    // code goes here
  }

其中 Treenode 是一个定义为的结构:

struct Treenode{
   int feet;
   int inches;
}; 

该函数应计算所有数组元素的 (12*feet+inches) 并返回最大值。

Q2) 完成以下函数:

Treenode* findInorderSuccessor( Treenode * root ,Treenode* node){
        // code goes here
    }

Where Treenode is a structure defined as:

struct Treenode{
    Treenode* left;
    Treenode* right;
    Int data;
    Treenode*parent;
};

该函数应返回指向函数中提供的“节点”的中序后继的指针。如果不存在,则返回 NULL。

Q3) 完成以下函数:

Node * findIntersection( Node* head1, Node*head2){
   // code goes here
}

Where node is the structure of a linked list node
defined as:

struct Node{
  int data;
  Node *next;
}; 

将头指针返回到两个链表的交点。有人提到不要使用额外的空间,并且实现应该是递归的。


团体飞行:

40名候选人入围小组飞轮。

候选人大致分为4-5人一组,每组由一名导师负责。我们被问到一个问题,我们被要求用任何高级语言编写函数解决方案(不允许使用 Ruby、 PHP、 Python等脚本语言)。我们被分配最多 45 分钟。

问题:给定两个长度相同的字符数组(不是字符串),并将它们的长度作为函数的参数。我们必须找出第一个字符串是否是另一个字符串的旋转。我们不应该使用任何额外的空间。时间复杂度可能是二次的。

导师不断地来到每个人面前。他首先问我在想什么。我用一个例子告诉他这个方法。然后我在项目符号中编写了代码、示例测试用例和基本方法部分。不过,他们只需要代码。

第1轮:

大约 50% 的候选人在小组飞行后被选中。

我收到了两个编码问题:

问题 1) 给定一棵树,打印树的所有边,满足以下两个条件:
只打印右孩子为 NULL 的节点,
该节点是叶节点。

我给出了递归的方法。后来我在解释它在某些情况下失败时意识到。我要求一段时间来纠正它。我终于给了他一个代码,他似乎对此很好。

问题2)给定一个矩阵,以之字形方式遍历矩阵:

Ex:  
        1 2 3 4
        5 6 7 8
        9 1 1 2

Traversal: 1 2 5 9 6 3 4 7 1 1 8 2

我给出了一种时间复杂度 O(NXM) 的方法。他问我是否可以在更小的时间复杂度内做到这一点。我可能会使用额外的空间。我想不出任何非常具体的东西。我的回合结束了。

第 2 轮:
面试官问我组飞得怎么样。然后他向我解释了我有一个固定的 NXM 二维空间的情况。我得到了一组随机数(不在运行中)。我必须找到一种有效的方法来存储它们,这样我才能以最小的时间复杂度检索每个元素。

通过命中和试验,我们达到了一种方法,我可以以这样一种方式存储数字,即每一行都被排序,并且跨行的顺序也在增加。现在我们可以对第一列应用二分查找来找到合适的行,然后二分查找得到的行中的数字。时间复杂度:logM+logN。他让我写代码。第二轮就是这样。

面试官非常乐于助人,很愉快。


第三轮:(决赛)

15分钟后我被要求参加第3轮。它应该是人力资源,但主要是技术性的。我被问及我所有的项目以及我在其中的角色。

然后他给了我一个问题,说我们只讨论方法,不需要编码。

该问题类似于以下 geeksforgeeks 问题:https://www.geeksforgeeks.org/divide-and-conquer-set-7-the-skyline-problem/

我有点挣扎,但他帮助了我。然后我们讨论了最终的解决方案和方法。
由于是晚上 8 点 30 分,我已经完成了一天的工作。一轮结束后,有人告诉我,我已经完成了所有轮次,不必再来。