📜  微软面试体验(实习)

📅  最后修改于: 2021-11-16 15:46:53             🧑  作者: Mango

整个过程包括一轮在线编码、一轮集体飞行和三轮技术面试。

Online Coding Round : 有3道“函数题”,即我们只需要完成一个函数,分别为2、3、5分,总时间为75分钟。它是在 Cocubes 平台上进行的,虽然我在Java没有遇到任何库问题,但我的一些使用 C++ 的伙伴却遇到了问题。提交时,显示了一些琐碎的测试用例的结果。

2 分:奇数车可在奇数日行驶,偶数车可在偶数日行驶。其他车辆每辆将被罚款 250 元。给定在某个日期(一个整数)行驶的汽车数量(一个整数数组),计算收集到的罚款总数。

例子:

Input : cars = [1, 2, 3], date = 15
Output : 250(for car 2)
Input: cars = [3, 4, 5], date = 16
Output : 500(for cars 3 and 5)

3 分:下一个最小的回文

5 分:二叉树中表亲的总和

Group fly round : C 和 DSA 上有 7 个简答题和一个编码问题检测和删除链表中的循环

面试:这是 3 轮个人技术面试

第一轮:这是一个链表问题。我不得不在纸上编写解决方案,并在向面试官解释的同时进行试运行。

第二轮:我上了一门关于机器学习的课程,所以我被问到一些关于梯度下降和分类问题的问题。
我被问到两个问题。第一个是找到精确到小数点后 10 位的数字的平方根。我给出了一个我必须编码的二进制搜索解决方案。

第二个问题是如果 k 个最低有效数字不重要,则对数字列表进行排序。
例子:

Input : list = [674, 689, 349, 327, 989], k = 2
Output : [349, 327, 674, 689, 989] is valid and so is [327, 349, 689, 674, 989]

我的第一种方法是基数排序,但最终提出了基于桶排序的解决方案。这个想法是通过将每个元素除以 10^k 将每个元素映射到“桶”,例如 674 和 689 将被映射到桶 6、349 和 327 到“3”等等,然后对桶进行排序。我不必编写代码。

第三轮:我们讨论了我的关键帧提取项目。他问了我关于算法的问题以及我如何改进它。

提出的问题是开放式的,通过讨论达成了解决方案。
有一个数字键盘。键 1 映射到“a”、“b”和“c”,键 2 映射到“d”、“e”、“f”等等。因此,按键 12 的顺序映射到所有可能的组合,即“ad”、“ae”、“af”、“bd”、“be”等。
还有一个字符串列表,并给出一系列按键显示具有映射作为前缀的字符串。
这类似于在电话拨号器中进行搜索的方式。

list = [abc, adg]

sequence = 1
output = [abc, adg]

sequence = 12
output = [adg]

sequence = 11
output = [abc]

sequence = 2
output = []

记忆不是限制,但时间至关重要。

我最初的方法是根据按键顺序将字符串列表存储在前缀树中,然后是 BFS。但是复杂性是序列中按键次数的指数,所以我不得不找到一个基于散列的不同解决方案。

这不是一个问题,而是对各种方法的讨论,最重要的方面是传达思想及其背后的基本原理。

我不得不编写解决方案的一部分。

总体而言,面试官很有帮助,并鼓励提出问题。

保持喧嚣,
奥尔皮杜斯