📜  亚马逊面试经历|设置 232(SDE-1 为 1 年经验)

📅  最后修改于: 2021-09-23 06:13:18             🧑  作者: Mango

采访一:
在面试开始之前,我们被要求解决 6 个问题

  1. 编写一个函数来交换一个没有临时变量的数字。
  2. 找出数字是否是 2 的幂。
  3. 在 BST 中找到 2 个节点的最小共同祖先。
  4. 编写一个方法,用“%20”替换字符串的所有空格。
  5. 检查二叉树是否平衡。
  6. 实现一个算法来查找单向链表的倒数第 n 个元素。
  7. 假设您有一个方法 isSubstring 来检查一个词是否是另一个词的子字符串。给定两个字符串编写代码以检查 s2 是 s1 的旋转,仅使用一次对 isSubstring 的调用(即“waterbottle”是“erbottlewat”的旋转)

在第一次采访中,我被问到如何解决 Q4) 用 ‘%20’ 和 Q6) 替换链表末尾的第 n 个节点的所有空格。
然后我们详细讨论了我和我以前的雇主做的一个项目。

然后他问了几个问题->
Q1) 动态规划 |第 21 组(LIS 的变体)– GeeksforGeeks -> 1. 搭建桥梁:考虑一个 2-D 地图,其中一条水平河流穿过其中心。南岸有 n 个城市,x 坐标为 a(1) … a(n),北岸有 n 个城市,x 坐标为 b(1) … b(n)。您希望使用桥梁连接尽可能多的南北城市对,以免两座桥梁交叉。连接城市时,只能连接北岸的城市i和南岸的城市i。

Q2) 编写一个 C 程序来打印给定字符串的所有排列 – GeeksforGeeks -> 打印一个字符串的所有排列

Q3) 给定一个站内各种列车的到达和出发时间。计算所需的最少站台数量,这样火车就不必等待另一列火车离开站台。
该问题基本上意味着计算在任何给定时间站台中出现的最大列车数量。
回答
对到达时间进行排序,对出发时间进行排序,保持一个计数初始化为0。将到达时间的第一个元素与出发时间的第一个元素进行比较,如果到达时当前索引的值小于值索引,则增加计数的值在出发并增加到达指数,反之亦然。保持您看到的最大计数。


第二轮

Q1) 给定十亿颗恒星的 x,y,z 坐标(基本上整个阵列无法放入 RAM)计算最接近的 k。
答案 -> 使用包含 k 个最小距离的最大堆。
时间-> n(log k)
那么问题就变成了 -> 现在我们有几台可以组合起来适合整个恒星集的计算机,那么你将如何解决它?

答案-> 使用选择算法(类似于快速排序的第 1 步)在每台计算机中找到 k 个最近的恒星。 Time -> O(n) 然后使用这 m 台计算机中的 k 来找到最小的 k。一种方法是将它们单独排序。然后创建一个最小堆来计算 k 最小值。
O(k^2 log k)

Q2) 对称树(自身的镜像) – GeeksforGeeks -> 如何检查树是否是自身的镜像
然后将问题扩展到 n 叉树。
答案 -> 在阅读这个答案之前请阅读上面的链接 – 我们创建一个这样的 n 叉树 ->

struct node{
    int data;
    vector < struct node* > child;
}

然后我们将每个节点的子节点数作为 nodeName->child.size();
我们用它来比较节点的第一个孩子和最后一个孩子,第二个孩子和最后一个孩子,依此类推:


第三轮

Q1) 编写 C 代码来计算表达式树。
Answer-> 必须用后序遍历方法来完成,因为左子树的值与右子树无关。

Q2)图形中的关节点(或切点) – GeeksforGeeks -> 检查关节点

Q3) 给定一个数字流,比如 1,3,5,4,6,9 打印 1,3-6,9
答案-> 创建一个哈希映射,其中包含前一个序列的结束索引的值。

For example
when we get 1,3,5 the hash map is
1 0
3 1
5 2

键是数字,值是它出现的索引。
当我们得到 4 时,我们必须检查 3 和 5 的索引。(上一个下一个)
3 处的值是 1,4 的索引是 3,所以它们不能配对。
然后我们检查 5。5 的索引是 2,4 的索引是 3,因为它们在一起,所以它们可以配对。

1 0
3 1
5 2-3
4 2-3

然后我们再次检查3,3的索引是1,4的索引是2-3,所以他们可以匹配

1 0
3 1-3
5 1-3
4 1-3

我们继续。我认为我没有按照提问的方式回答问题,但他似乎对我给出的回答没有意见。

接下来,他修改了更多内容以在其中包含分布式系统。并问我是否有几个系统以循环方式接收输入,我将如何实现上述算法。我对此一无所知。

在第 3 轮之后,亚马逊打电话给我,告诉我前两轮是积极的,但第 3 轮不是。第 3 轮是招聘经理轮,他不高兴我对 RAID 一无所知(标准 RAID 级别 – 维基百科,免费的百科全书)

所以我又找了一轮招聘经理。

第 4 轮
https://www.geeksforgeeks.org/find-a-pair-with-given-sum-in-bst/
在 bst 中找到具有给定总和的对

更多关于第三轮发生的事情以及我为什么想离开我现在的公司的问题。

第 5 轮(提高门槛)
像这样的问题
1) 告诉我你与团队其他成员有不同意见的时间。
2) 告诉我你曾经认为问题是别的什么,但结果是别的什么
3)告诉我你的意见被抛弃的时间。
4)告诉我你必须在很短的时间内工作的时间。

编码问题-
1) 鉴于我们可以形成 6,9 和 20 支笔的包装。给定一个数字 x,计算我们是否可以形成包装组合来形成这么多笔。例如,24 支笔可以由 2 支 9 支笔组成,而 1 支 6 支和 23 支笔则不能组成。
回答
使用递归函数动态规划
DP[i]=DP[i-6]||DP[i-9]||DP[i-20];

2) 设计自动扶梯系统。你会做哪些课程,等等。

在第 5 轮之后,他们没有发现我的文化契合度,所以他们进行了第 6 轮。
第 6 轮
像这样的问题 – 告诉我一些关于你自己的事情,
你帮助别人的时候
一次你和你的经理分享了不同的意见。

亚马逊的所有练习题!