大家好 !
我将与您分享我在 2020 年 2 月就 SDE-1 角色在亚马逊的面试经验。
第1轮:
第一轮是在 AMCAT 上进行的在线评估测试。有两个编码问题需要在 90 分钟内完成。
- 给定一个由 0 和 1 组成的二维矩阵,其中 1 表示感染者,0 表示未感染者。每隔一秒,一个感染者就会感染他的 4 个未感染的邻居(L、R、U、D)。需要计算时间,以便所有人都被感染。
方法:应用BFS
类似于: 烂橘子 - 给定一个由 0 和 1 组成的二维矩阵,其中 1 表示建筑组件,0 表示空区域。我们需要计算连接的建筑组件的总数。
方法:应用 DFS
类似于:岛屿数量
接下来的三轮在古尔冈现场进行。
第二轮:
这一轮首先简要介绍了我和我在以前公司的工作,然后是两个编码问题:
- 给定一个字符串说“ABAABCD”。计算要删除的最小字母数,以便剩余的字母可以形成回文字符串。
“ABAABCD”的答案是:2
解释:去掉C和D,剩下的字符串是:“ABAAB”可以形成一个回文(BAAAB)
方法:简单地统计奇数字符的数量。由于您可以保留一个奇数字符,因此答案将是奇数字符-1。我使用 HashMap 来存储字符及其计数。
if(odd_characters==0) 返回 0;
返回odd_characters-1; - 给定两个按递增顺序排序的链表。按降序合并它们。您必须就地合并,不能创建新的链表。
方法:简单地应用合并排序概念并在合并列表的前面而不是末尾附加字符。
按递增顺序合并:合并两个已排序的链表
第 3 轮:
这一轮也开始简要介绍我和我在以前公司的工作,然后是两个编码问题:
- 给定一个按非递减顺序排列的 0 和 1 数组。在 O(log n) 中找到数组的总和
方法:应用二分搜索找到前1的位置并返回n-位置+1。 - 给定一个整数数组,在 O(n) 中找到并替换给定数组中每个元素的下一个较小元素。
方法:使用堆栈。
脚步 :
从后面开始插入元素。
如果堆栈顶部大于当前元素,则继续删除直到找到较小的元素或堆栈变空。
if Stack –> 当前元素的空答案=-1
当前元素的其他答案= stack.peek();
将当前元素插入堆栈并重复以上 3 行。此外,他问了我一些操作系统概念和一些以前工作相关的问题。
第 4 轮:
这一轮也开始简要介绍我和我在前一家公司的工作,然后是两个编码问题。他还问了我目前的项目,深入询问了我用来解决所面临问题的方法。
- 给定一个数字 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 值即可获得到达特定楼梯的方法。 - 给定一个二叉搜索树(BST),找到给定 BST 的顶视图。方法:保持每个节点的水平距离和水平。
创建一个 TreeMap来存储水平距离和一个 pair 类对象。 (注意:TreeMap 已经根据键即水平距离排序)
按以下方式应用中序遍历:void topView(Node root, int hd, int level)
{
如果(根==空)
返回;
如果(地图。包含(高清))
{
if(map.get(hd).levelmap.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.5 年里做过的最难的事情以及我之前工作相关的问题。
- 一个数字由一个 LinkedList 表示,其中每个节点代表一个数字。给你两个这样的数,求两个数的和。您需要返回代表两个给定数字之和的 LinkedList 的头部。
方法:首先我回答反转两个然后添加每个数字并转发进位。最后反转最终的LinkedList。
其次,我给了他另一种使用 Stack 的方法。
最后我给出了递归方法,他让我用同样的方法解决。
链接:两个链表的总和
最后我接到了 HR 的电话,我被选中担任 SDE-1 角色。
请记住我在面试中使用的以下几点:
A. 如果您知道,请务必回答,否则只需说“我不认识先生/女士”。
B. 对于编码问题,从蛮力方法开始优化问题。
C. 在编写代码时,请确保仅由您自己覆盖所有边缘情况。在最后说你已经完成之前,你可以先试运行你的代码。
D. 应该能够计算时间和空间复杂度。
在 GeeksForGeeks 上为所有数据结构和算法概念练习更多,你会在这个地方找到所有概念。
文章提交人:Ripesh Yadav