📜  亚马逊面试体验SDE-1 | 2020 年 2 月(Exp 1.5 年)

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

大家好 !
我将与您分享我在 2020 年 2 月就 SDE-1 角色在亚马逊的面试经验。

第1轮:
第一轮是在 AMCAT 上进行的在线评估测试。有两个编码问题需要在 90 分钟内完成。

  1. 给定一个由 0 和 1 组成的二维矩阵,其中 1 表示感染者,0 表示未感染者。每隔一秒,一个感染者就会感染他的 4 个未感染的邻居(L、R、U、D)。需要计算时间,以便所有人都被感染。
    方法:应用BFS
    类似于: 烂橘子
  2. 给定一个由 0 和 1 组成的二维矩阵,其中 1 表示建筑组件,0 表示空区域。我们需要计算连接的建筑组件的总数。
    方法:应用 DFS
    类似于:岛屿数量

接下来的三轮在古尔冈现场进行。

第二轮:

这一轮首先简要介绍了我和我在以前公司的工作,然后是两个编码问题:

  1. 给定一个字符串说“ABAABCD”。计算要删除的最小字母数,以便剩余的字母可以形成回文字符串。
    “ABAABCD”的答案是:2
    解释:去掉C和D,剩下的字符串是:“ABAAB”可以形成一个回文(BAAAB)
    方法:简单地统计奇数字符的数量。由于您可以保留一个奇数字符,因此答案将是奇数字符-1。我使用 HashMap 来存储字符及其计数。
    if(odd_characters==0) 返回 0;
    返回odd_characters-1;
  2. 给定两个按递增顺序排序的链表。按降序合并它们。您必须就地合并,不能创建新的链表。
    方法:简单地应用合并排序概念并在合并列表的前面而不是末尾附加字符。
    按递增顺序合并:合并两个已排序的链表

第 3 轮:

这一轮也开始简要介绍我和我在以前公司的工作,然后是两个编码问题:

  1. 给定一个按非递减顺序排列的 0 和 1 数组。在 O(log n) 中找到数组的总和
    方法:应用二分搜索找到前1的位置并返回n-位置+1。
  2. 给定一个整数数组,在 O(n) 中找到并替换给定数组中每个元素的下一个较小元素。
    方法:使用堆栈。
    脚步 :
    从后面开始插入元素。
    如果堆栈顶部大于当前元素,则继续删除直到找到较小的元素或堆栈变空。
    if Stack –> 当前元素的空答案=-1
    当前元素的其他答案= stack.peek();
    将当前元素插入堆栈并重复以上 3 行。此外,他问了我一些操作系统概念和一些以前工作相关的问题。

第 4 轮:

这一轮也开始简要介绍我和我在前一家公司的工作,然后是两个编码问题。他还问了我目前的项目,深入询问了我用来解决所面临问题的方法。

  1. 给定一个数字 n 代表总楼梯数。找出有多少种方法可以一次以 1 或 2 个步骤到达第 n 个楼梯。
    方法:DP
    到第 0 次后,路数 = 1;
    达到第一,方式数 = 1 (0->1);
    达到第二,路数= 2 (0->1->2 | 0->2)
    达到第三,方法数= 3
    因此我们可以看到,要到达第 n 个楼梯,方式数 = 到达第 (n-1) 个的方式 + 到达第 (n-2) 个的方式。
    链接:Nth StairFurthermore 他让我用 k 步(可以采取的最大 k 步)扩展这个问题:
    再次简单,只需添加先前的 k 值即可获得到达特定楼梯的方法。
  2. 给定一个二叉搜索树(BST),找到给定 BST 的顶视图。方法:保持每个节点的水平距离和水平。
    创建一个 TreeMap 来存储水平距离和一个 pair 类对象。 (注意:TreeMap 已经根据键即水平距离排序)
    按以下方式应用中序遍历:void topView(Node root, int hd, int level)
    {
    如果(根==空)
    返回;
    如果(地图。包含(高清))
    {
    if(map.get(hd).level map.put(hd, new Pair(root.data, level));
    }
    别的
    {
    map.add(hd, new Pair(root.data, level));
    }
    topView(root.left, hd-1, level+1);
    topView(root.right, hd+1, level+1);
    }简单地为 TreeMap.class Pair 中的每个键打印 Pair.value{
    整数值;
    国际水平;
    对(int a, int b)
    {
    值=一;
    级别=b;
    }
    }

第 5 轮:

这是在 Chime Video Call 上进行的最后一轮比赛:

  1. 问了我在过去 1.5 年里做过的最难的事情以及我之前工作相关的问题。
  2. 一个数字由一个 LinkedList 表示,其中每个节点代表一个数字。给你两个这样的数,求两个数的和。您需要返回代表两个给定数字之和的 LinkedList 的头部。
    方法:首先我回答反转两个然后添加每个数字并转发进位。最后反转最终的LinkedList。
    其次,我给了他另一种使用 Stack 的方法。
    最后我给出了递归方法,他让我用同样的方法解决。
    链接:两个链表的总和

最后我接到了 HR 的电话,我被选中担任 SDE-1 角色。
请记住我在面试中使用的以下几点:

A. 如果您知道,请务必回答,否则只需说“我不认识先生/女士”。
B. 对于编码问题,从蛮力方法开始优化问题。
C. 在编写代码时,请确保仅由您自己覆盖所有边缘情况。在最后说你已经完成之前,你可以先试运行你的代码。
D. 应该能够计算时间和空间复杂度。

在 GeeksForGeeks 上为所有数据结构和算法概念练习更多,你会在这个地方找到所有概念。

文章提交人:Ripesh Yadav