亚马逊专访 | Set 58(软件开发工程师校内)
我在 E&CE,我正在 IIT 校园分享我在亚马逊的面试经验,以帮助您准备面试。有300名学生在线测试。 25人被选中进行面试。同一天进行了4轮背靠背比赛。我的面试过程持续了大约 5 个小时,最终我被录用了。 🙂
第1轮:
1. 给定 10 亿个整数。找出 100 个最大整数。可用内存不足以存储 10 亿个整数。
2. 给定 N 个整数数组,范围从 0 到 N-1。输出最大重复整数。仅使用 O(1) 内存。
第 2 轮:
1. 给定一个整数数组,先升后降。在该数组中查找某个给定整数的索引。前任。 2,4,6,8,7,5,4,3。输入:4。输出:2、7。在纸上写代码。
2. 给出两个有序数组。当两个数组合并和排序时找到中位数。在纸上写伪代码。注意边界条件。
第三轮:
基本操作系统、数据库概念。
1. 给你一些整数。提出一种数据结构来实现“add”、“delete”、“fetch”和“fetch any”操作。所有四个操作必须在恒定时间内完成。
2. 有一个 B 树,有两种类型的节点 A 和 B。在 O(1) 时间内进行中序遍历时返回第 n 个 A 或第 n 个 B。并在纸上写伪代码。
与经理的第 4 轮:
有一个非常大的文本文件,由几行和几列整数组成。可用内存不足以存储整个文本文件。一列可以存储在内存中。对与给定列相对应的整个文件进行排序,保持所有行不变。您不能制作新的文本文件。在纸上写出简洁的代码。
解决方案:
第1轮:
1. 制作前 100 个元素的最小堆。对于每个剩余的元素,如果它大于根(最小)节点,则删除根节点,添加该元素然后堆化。时间 = 10 亿 * log(100)
2.简单。对于 i = 0 到 N-1,A[A[i]%N] += N。返回具有最大值 A[i] 的 i。准时。
第 2 轮:
1.找到支点。 O(log n) 在左右数组中进行二分查找。 O(log n)
2. 比较两个数组的中位数。相应地选择右半或左半阵列。重复。 O(log n)
第三轮:
1.制作哈希表和链表。添加元素时,将其添加到哈希表和链表中。但是在哈希表中沿着值car也存储指向链表中相同值的指针。要删除在哈希表中找到的元素,请使用存储的指针从链表中删除相同的元素。对于获取链表的任何操作返回头节点。内存 = 2*N
2. O(n)时间预处理:为A和B制作两个向量。按顺序遍历。当您获得 A 时,将其指针添加到 A 的向量中。对于 B 也是如此。
第四轮:
阅读整列。堆排序(节省内存)。现在您知道旧索引和新索引了。将整行从旧索引转移到新索引。在临时存储中保留一行以避免覆盖。
一些可能对您有所帮助的提示:
1. 无论你说什么,都要始终保持自信。
2. 仔细聆听。提出疑问,直到您完全清楚问题为止。
3. 大声思考。从明显的方法开始,然后对其进行改进。
4.他们会测试你的方法、思维过程。不要放弃。如果你被卡住了,面试官可能会给你提示。
5. 引导他们询问你的强项。