亚马逊浦那泳池校园采访
亚马逊游泳池校园安置活动于 2019 年 3 月进行。一共进行了五轮,第一轮是在 Hackerearth 上举行的在线编码轮,随后是三轮技术面试和一个提高标准的技术轮。
线上回合
有 2 个编码问题和 10 个与操作系统和 DBMS 相关的 MCQ。
技术面试1
问题 1
给定两个整数 n、k 和一个大小为 n 的数组a 。找出数组 a 中 k 的频率。
解决方案
我的第一个解决方案是在数组 h 中散列整个数组的频率,然后打印 h[k]。在这种情况下,时间和空间复杂度都是 O(n)。面试官要求我提高空间复杂度。
在我的下一个解决方案中,我只取了一个整数变量 count 并在遍历数组 a 时每次发生 k 时递增它。这个空间复杂度降低到 O(1),时间复杂度仍然是 O(n)。
他告诉我,如果数组已排序,现在我也必须降低时间复杂度。我可以简单地使用 C++ 中的 lower_bound() 和 upper_bound() 函数来查找数组 a 中第一次和最后一次出现的 k。现在空间复杂度为 O(1),时间复杂度为 O(log(n))。他让我写代码。
而不是直接使用 upper_bound() 和 lower_bound() 我认为实现它们会更好。所以,我写了两个二分查找代码,一个用于lower_bound(),另一个用于upper_bound()。他很满意,继续下一个问题。
问题 2
从排序的链接创建二叉搜索树。
解决方案
我的第一个解决方案是一棵明显的倾斜树。他印象深刻,并告诉他这确实是非常容易和简单的解决方案,但现在他想要一棵高度平衡的树。这是解决方案。他告诉我编写整个代码,在他的帮助下我做得有些正确。
技术面试2
我的第二轮是由一位非常漂亮和聪明的年轻女士主持的。她通过提出建议和想法来改进我的解决方案,给了我很多帮助。
问题 1
给定一棵二叉树和两个整数 k 和 d。打印距离 k 为 d 的所有节点。
解决方案
我的第一个解决方案是使用 LCA 找到每个节点到节点 k 的距离,然后只打印距离为 d 的那些节点。这是我的想法。我的解决方案的时间复杂度是 O(nlog(n))。她想要它
在)。她帮助我构建了所有逻辑,最后我被告知要编写代码。
问题 2
给你一个数组 a,它只包含 0、1 和 2。你必须对数组进行排序。
解决方案
我的第一个解决方案是在一次遍历中散列数组的频率,然后在第二次遍历中填充 0,然后是 1,然后是 2。她很满意,但希望单次遍历。这就是解决方案。有人告诉我写代码。
技术面试3
这更多是对计算机科学各个领域的一般性讨论,而不是解决问题的回合。
问题 1
你有两个文件 a.txt 和 b.txt 有两个数字,最多十亿位。您必须计算两个数字的总和。
解决方案
我的解决方案是首先将两个文件的文件指针移到最后,然后开始添加数字并进位,然后向后移动并将结果存储到一个新文件中。最后创建另一个文件并保存先前结果文件的反转内容。他很满意,但随后限制了向后遍历。我告诉我们可以使用递归来返回进位。他询问是否可以使用任何数据结构来解决这个问题。我用链表回答,因为无法分配大量连续内存但链表不使用连续内存。
问题 2
给你一个字母网格。您必须打印可以形成单词“AMAZON”的所有起点的坐标。您可以向上、向下、向左和向右移动。
解决方案
我给出了一个使用 DFS 和 DP 的解决方案。这很难解释,但我尽力了。我猜他期待一个更简单的解决方案,但他很满意。他告诉我写代码是我的想法。
技术暨酒吧提高轮
有人告诉我简要描述我自己和我的项目。他问我在这个项目中的角色。之后,他给出了两个问题要解决。
问题 1
给你一棵二叉树和一个节点 k。判断k的左子树是否是右子树的镜像。
解决方案
这个想法是对此的修改。
问题 2
给你一个字符数组。您必须返回一个字符数组,其中每个字母 x 都存在 min(频率(x),x 在字母顺序中的位置))。
解决方案
这是一个简单的实现问题。有人告诉我用类正确编写代码。
最终,共有9人入选。其中 6 人来自陆军理工学院。我有幸成为他们中的一员。