📜  微软校外实习面试

📅  最后修改于: 2021-11-16 07:29:12             🧑  作者: Mango

有一轮在线竞争性编程,大约有 100 名学生入围 VIT Chennai 校区的招聘流程。

第一轮是笔试。 (1小时)
问题 :
1. 给定两个按升序排序的单向链表,返回一个按降序排序的链表,该链表将两个给定链表的元素组合在一起。 (10 分)

2. 为上述问题编写测试用例。 (5 分)

3.鉴于一个字符串,返回字符串的游程编码。例如:aaabbc -> a3b2c,abbbbc -> ab4c
(10 分)

4. 为上述问题编写测试用例。 (5 分)

5. 给出一些C++程序并确定输出。 (我没有时间尝试这个)(2 分)

6. 找出给定程序中的错误。一个Java程序,它接受两个代表两个数字的链表,并返回一个链表,它是两个数字的总和。 (3 分)

第二轮:面试

问题:检查一个单向链表是否是回文。
我从找到中间元素并反转链表的后半部分的解决方案开始,然后对相应元素进行线性比较。这有效,但我们正在更改原始列表的状态。

然后我讲述了我们从中间元素遍历到最后将每个元素放入堆栈的方法。然后一一弹出并与列表头部的元素进行比较。
这需要 O(n) 空间复杂度。

最后一种方法是基于递归的方法。我花时间从头开始思考这个问题。这里给出了解决这个问题的一种方法。我的方法有点不同。首先找到中间节点。然后将该中间节点传递给递归函数。当递归自底向上时,我们检查递归中的头指针和当前节点是否相同,并且在每个递归调用中向后更新头指针到下一个节点。

讨论了如何使用快慢指针找到中间节点。

然后他让我用任何语言编写端到端的代码。我用Python来编码。他称赞我在Python使用嵌套函数来保持代码干净。

第三轮:面试

问题:给定一个棋盘,骑士被放置在 x, y 点。给定目的地坐标,找出 Knight 到达目的地所需的最少移动次数。

我使用基于 BFS 的方法来探索所有路径。有很多极端情况需要检查。我们预计将讨论所有这些案例。

PS:如果您有解决上述任何问题的有效方法,请将它们放在评论部分。我会在文章中更新。