亚马逊面试经历 | SDE-1 校外
我从在亚马逊工作的资深人士那里得到了推荐,并获得了在线测试链接。有两个编码问题,很少有基于操作系统和网络以及其他 CS 基础知识的 MCQ。 20 分的编码问题,而每个 MCQ 的正确答案为 +3,错误答案为 -1。编码问题如下
1.有一个字符串,比如说 ABCDJHGDCBA。您可以将字符串剪切一次并将左侧部分附加到右侧字符串。附加字符串时有一个规则,即在两个字符串的连接处,字符不断相互抵消,直到它们匹配。所以我们必须打印切割和连接左右半部分后可以获得的最小字符串长度。
例如,我们在 AB 和 CDJHGDCBA 中切割给定的字符串,然后相加后的结果将是 CDJHGDC。所以我们可以通过 ABCD 和 JHGDCBA 得到最小长度。基本上,我们必须找到从左到右匹配多少长度。然后从字符串的长度中减去匹配长度的两倍。
2.给定一些巧克力类型 ID 及其数量。此外,它被赋予了您将吃巧克力的巧克力的优先顺序。当你吃完一种巧克力时,只有你会吃其他类型的巧克力。此外,您在某一天只能吃一种巧克力。你必须每天至少吃一块巧克力,最多可以吃任意数量。给定 Q 个查询,每个查询都包含巧克力 id 和天数。如果您可以在给定日期吃巧克力 id,您必须打印 YES,否则打印 NO。
我解决了编码问题和一些多项选择题,我的笔记本电脑在两者之间关闭,所以测试在那时终止。尽管如此,我还是接到了面试电话。
第1轮:
第一个问题
找到第一个参观所有加油站的循环之旅
第二个问题
没有两个元素相邻的最大和
为两者编写了功能齐全的代码。
第 2 轮:
他问在对数组进行排序后,哪个元素将出现在第 K 位。
起初,我告诉他使用最少的 K 个元素堆,然后他限制我使用额外的空间。然后我告诉他快速排序的方法。然后他告诉写代码。
未排序数组中的第 K 个最小/最大元素
第二个问题
有 BST,你会得到一个号码和一个新号码,这样如果你用新号码替换旧号码,BST 属性不会改变。因此,您必须编写代码来克隆新的 BST,以便将旧号码替换为新号码,以便我们分配最少的内存。他问的方式有很多模棱两可的地方,所以花了将近15分钟才把问题弄清楚。
基本上我们必须编写以下代码:
node* cloneNewBST(root, oldVal, newVal){
if(root->data==oldVal){
node* temp=createNode(newVal);
temp->right=root->right, temp->left=root->left;
return temp;
}
else if(root->data
temp->left=NULL;
temp->right=cloneNewBST(root->right, oldVal, newVal);
return temp;
}
else{
node* temp=createNode(root->data);
temp->right=NULL;
temp->left=cloneNewBST(root->left, oldVal, newVal);
return temp;
}
}
第三轮:
第一个问题是使用归并排序对链表进行排序。
第二个问题
捕获雨水
为两者编写代码。
第四轮:
有两个面试官。
这一轮是相当艰难的一轮。询问与死锁相关的问题,LRU 缓存算法间接(没有提到 LRU 缓存,而是使用另一个与 LRU 缓存类似的故事)。
- 分割算法
https://www.geeksforgeeks.org/minimize-cash-flow-among-given-set-friends-borrowed-money/ 我告诉算法使用堆来解决这个问题。
- Boggle (Find all possible words in a board of 字符) 在这个问题中,他们想要尽可能多的优化。
- 有一个城市,您必须从 1 开始分配 aadhar 号码。如果一个人死了,那么您可以将他的 aadhar 号码分配给另一个新人。您将为任何新条目分配第一个可能的 aadhar 编号。他们讨论了数据结构以及我们将如何有效地做到这一点。
判决:选定