亚马逊校外面试经历(SDE-1,有经验)
第1轮:
1) 介绍一下你自己。
2) 截留雨水:给定 n 个非负整数表示高程图,其中每个条的宽度为 1,计算下雨后能够截留多少水。
https://www.geeksforgeeks.org/trapping-rain-water/
3) 打印二叉树的左视图。
https://www.geeksforgeeks.org/print-left-view-binary-tree/
讨论:我给出了两种方法,一种使用 DFS,另一种使用级别顺序遍历。
他要求比较两种方法并实施有效的方法。 DFS 是高效的,因为按照层级顺序,您需要存储每一层的所有节点,其中一些可能不是 BT 左视图的一部分。
第二轮:
1) 介绍一下你自己。
2) 求 BST 中第 k 个最小元素之后的 n 个元素的总和。树很大,你不能遍历树。
讨论:由于不允许数组遍历,因此我们需要对树进行一些预处理,例如存储其所有前驱节点的总和。要查找第 k 个最小元素,请使用顺序统计方法:
https://www.geeksforgeeks.org/find-k-th-smallest-element-in-bst-order-statistics-in-bst/
3) 给定一个已旋转 n 次的排序数组。找出 n 的值。
它类似于下面的帖子,您只需要找到枢轴元素。如果您有枢轴元素的索引,则可以获得数组旋转的次数。
https://www.geeksforgeeks.org/search-an-element-in-a-sorted-and-pivoted-array/
第 3 轮:
1) 计算到达第 n 级楼梯的方法。
https://www.geeksforgeeks.org/count-ways-reach-nth-stair/
它类似于斐波那契数列。面试官询问了实现相同的各种方法 – 递归,一维数组,具有 3 个变量和每个变量的复杂性。
2) 设计推荐引擎。
这就像自动建议。我给出了尝试的方法。面试官似乎对这种方法很好,并要求我编写具有时间和空间复杂性的完整代码。尝试的实现:
https://www.geeksforgeeks.org/trie-insert-and-search/
第 4 轮(管理轮 – 通过视频通话)
说说你自己。
当前工作
你最喜欢哪个项目。
任何与您的经理发生冲突的情况。
您向您的团队提出的任何想法/技术都得到了实施和解决。
任何情况下,当您不得不走出舒适区时。
从您的经理/团队成员那里收到的最重要的反馈。
除了您的项目工作之外,您还做什么来增强您的技术知识。
还有很多。
第 5 轮(最后一轮 – 电话)
最初,我被问到关于我所做的工作、我所做的项目和一些管理问题的问题。
然后我得到了一个编码问题来解决。他们在电话屏幕面试中使用 Collabedit 工具,其中面试官和受访者共享同一个屏幕。
问题:打印两个给定句子中的所有非重复单词。
例如。陈述 1:我有一支蓝色钢笔。
陈述2:我有一支红笔。
输出:蓝色变成红色
讨论:我建议使用散列方法。面试官要求实施相同的。
注意事项:
您必须知道如何计算时间和空间复杂度。
在每一轮中,他们都会问你最近做过的项目/你最喜欢工作的项目/最具挑战性的工作等等——所以你应该为至少一个具有深入细节的项目做好准备。
对所问的每个问题从朴素的方法开始,然后继续进行具有更好空间和时间复杂性的解决方案。
无需浪费时间阅读操作系统、网络、DBMS 等。他们只关心您所做的项目和您的编码技能,无论您在编写代码时是否涵盖所有边缘情况,了解时间和空间复杂度,是否有更好的方法来解决相同的问题问题等等。