亚马逊面试经历 |设置 283(校内)
最近我在校园里的亚马逊面试。过程是:
线上回合:
————————-
一个 hackkerank 竞赛,有 22 个问题,包括 2 个编码问题和 20 个关于 OS、Aptitude、DBMS 的 MCQ。
编码问题:
1. 给定一个只有元素 '#' 和 '.' 的二维数组. '#' 代表樱桃,'.'代表什么。你能把数组分成两半,樱桃相等吗?您只能在水平或垂直方向上进行一次切割。
2. 大小为 k 的滑动窗口。查找每个窗口的最大值。
第1轮 :
——————
问题 1:在旋转和排序的数组中搜索。
面试官想要所有极端案例涵盖的代码。以及最大优化时间复杂度。
我给了他满意的 O(2*logn) 解决方案。
问题 2:给定一个数字 k ,找到 no。使用从 1 到 k-1 的数字之和来制作这个数字的方法。此外,您不能在组合中多次使用相同的数字,并且组合的所有排列也算作一种方式。
例如:如果 k= 6,则 (1,2,3) 的所有排列仅计为一种方式。
我在这一轮之后入围了。
第二轮
————
它仅包含一个问题,但对此进行了详细的讨论。
问题:范围最小查询。即给定一个数组和一个范围查询 (xi,yi) 找到范围 (xi,yi) 中的最小元素。这些查询可能非常大。
首先我给出了蛮力方法,然后我给出了一个具有时间和空间复杂性的段树解决方案。
然后他问如果我们必须更新一个元素然后更新一个范围怎么办。
之后他问如果我们删除一个元素会怎样。你如何修改你的解决方案来应对。
我建议他用 INT_MAX 更新元素并维护一个映射数组。
之后他问如果我们在数组中添加一个元素怎么办? .
我建议他在此基础上重建段树。他建议将其构造为二进制根而不是数组表示并存储范围。可以有一些可重用的子树。我如何找到这些子树以及如何使用它们以及时间复杂度是多少。
最后,我被告知使用具有以下属性的节点(min、start、end、node* left、node* end)编写范围 minmium 查询;
他印象深刻。:)
第三轮
——————
它也只包含一个问题。
问题:给定一组坐标,找到与原点的距离最大的前 k 个元素。
我给出了幼稚的方法和堆方法。后来他让我多想,然后我想出了快速排序分区函数的方法。
他让我给它编码。
第四轮
————
到目前为止,这是最简单的。
它包括问题:给定 2 个链表减去它们并将结果存储在更大的一个中并返回。
基本上,他希望我们为此涵盖所有极端情况。
之后就项目进行了讨论。
感谢 Geeks 为巨大的编程问题数据库的极客。做得很好🙂。