最近,通过推荐,我有机会在班加罗尔校区接受亚马逊的面试。
我有 8 个月的产品经验和 5 个月的实习经验。
第一轮电话:
有两个人,从正式介绍开始。
问题 1:给定一个数组和一个数字,说“Num1”。找出总和等于给定数字“Num1”的两个数字。
我告诉他第一个蛮力解决方案,然后他问我告诉他 O(n^2) 的时间复杂度。
然后他让我优化解决方案,我使用排序给出了一个 O(nlogn) 解决方案。
最后我告诉他使用哈希的 O(n) 解决方案。
问题 2:给定一组股票价格。确定通过买卖股票可以获得的最大利润(类似于堆栈跨度问题)。
我告诉他 O(n^2) 的蛮力解决方案,然后他问我是否可以给出优化的解决方案。
我告诉他使用堆栈的 O(n) 解决方案,但代码卡在一些测试用例上,他让我修改代码,但我不能,因为他们的时间不多了。
他们为我提供了一个指向 Colabedit(一种谷歌共享文档)的链接,我必须在其中进行编码。需要准备好生产代码。
2 天后,我接到亚马逊的电话,说反馈是积极的,他们让我来亚马逊办公室进行面对面的面试。
F2F 第 1 轮:
从一个简短的介绍开始。
Q1:给定一个 M*N 矩阵。您必须从 Index(0,0) 开始并以最大总和到达 Index(M-1,N-1) ,因为您只能向右或向下移动,即如果您处于索引 (i,j) , 你只能移动到 index(i,j+1) 或 index(i+1,j)
我为此给出了递归解决方案,并且对各种测试用例进行了大量讨论。
他让我优化代码。我给了他动态编程的方法。他问你以前做过吗,我说没有,然后他让我写代码。我不知道代码,因为我以前没有做过。我努力写了 2-3 次正确的代码,最后我写了正确的代码。
然后他对我说我面试完了,你有什么问题要问我吗,我问了两个问题。
需要生产就绪代码。
F2F 第二轮:
再次从简要介绍和一些项目讨论开始。
Q1: 一个类似于 LCA(Least Common Ancestor) of Tree 的问题,我已经明白了问题的意思,马上就给出了答案,没有再进一步澄清。
Q2:给定一些链表形式的资源,你必须将总和为 0(零)的资源全部抵消并返回剩余的列表。
我立即给出了解决方案,但无法处理一些角落测试用例,然后他要求我相应地修改代码。
然后他让我为它编写所有的测试用例,我做到了。
例如;鉴于这样的资源:
case 1 : 6 -6 8 4 -12 9 8 -8 它应该返回 9,因为所有其他的都被取消了。
在上面的示例中,列表被取消:
6 -6
8 4 -12
8 -8
开/关:9
案例 2 : 4 6 8 -9 10 -9
o/p : 4 6
情况 3 : 4 6 -10 8 9 10 -19 10 -18 20 25
开/关 : 20 25
F2F 第三轮:
从正式介绍开始,顺便说一句,他就是接受我电话采访的那个人。
Q1)他问我子集求和问题,即;给定一个数组,找到最大和的连续子数组。
我给了 O(n) 一个解决方案,以便在他提出问题后立即找到最大和,因为我知道解决方案。
然后他让我跟踪一些测试用例的代码,它通过了。然后他让我找到子数组的开始和结束索引,我修改了代码,最初出错了,但经过一些修改,我得到了正确的代码。
Q2)由两个链表表示的数字之和。
而我在他答完问题后立即给出了答案。但是我给出了从头开始添加两个链表数字的解决方案,但他告诉我像正常加法一样添加数字。
我通过反转链表然后添加数字并最终反转结果列表来给出该解决方案。
2-3 天后,我接到亚马逊打来的电话,说我已经通过了轮次,他们让我来参加招聘经理轮次。
一位面试官给我反馈说,他在面试官问完问题后立即给出了答案,因为我后来知道这对我来说是一个重大挫折。
所以对你们所有人的建议之一是即使你知道答案也假装你不知道。提出一些澄清问题,因为他们还观察您通过编码解决问题的能力。
招聘经理回合 F2F :
从一些基本问题开始,然后问你为什么要离开现在的公司,然后他问了斐波那契数列的代码。
我解释了斐波那契数列,然后他让我编码。
我编写了代码并跟踪了一些输入。
然后他开了个会,因为我迟到了,所以他让我改进代码,因为他说代码中有一些错误,我做到了。
之后,他让我为它编写递归代码。
然后他问代码的时间复杂度,我说指数。
然后他要我证明。
我说先生,我可以使用主定理或数学归纳法来做。但是现在我一个都不记得了。
然后他告诉我,你可以不用 Master Theorem 或 MI。然后在我的脑海中,它让我印象深刻的是递归树方法,但当时我对递归树方法也没有任何想法。所以我不能告诉他。
正如我在面试后就知道的那样,这一轮并不积极。这一轮过后我就被淘汰了。
亚马逊的所有练习题!