亚马逊面试经历 | 346 组(用于 SDE-1)
第一轮:
- 检查树是否是二叉树或二叉搜索树。
- 编写程序输出功率(m,n)。
- 给定一个无限长的排序数组,最后是 -1,在该数组中搜索一个值
- 提供上述问题的复杂性。
20 分钟后,两个人进入了我的小屋,他们直接开始了技术工作。他们从我的项目开始,我告诉我正在从事支持项目
第二轮
- 设计一个具有功能的音乐点唱机
1)添加歌曲
2) 删除歌曲
3) 在任何时间点播放的前 10 首歌曲
大约 40 分钟,我们使用不同的数据结构(如 hashmap、heap)对此进行了很多讨论。 - 二叉树中最长的连续路径。
我告诉了我的方法,但他们没有得到,然后我编写了递归代码并进行了解释。 - 求二叉树中所有左叶的总和。
最初我告诉了水平顺序遍历方法。他们让我编写代码。他们似乎很满意,但又提出了一个优化空间的问题。告诉了使用后顺序遍历的方法
第三轮:
这个人非常友好。
- 将两个排序的链表合并为一个,没有任何额外的空间。
- 给定一个二叉树和一个值。问题是找到那个节点的镜像,值总是存在于二叉树中
- 对于这个 2 的树镜像是 4,对于 1 镜像是 NULL。
- 给定一个包含 n 首歌曲的数组,我们只需播放所有歌曲一次。只给定 2 个函数
1)playsong(songid)
2)getRandom(n) – 返回 1 到 n 之间的随机值
告诉 hashmap 方法,他告诉 getRandom() 如果数百万次给出相同的值,那么它很糟糕。所以我修改了我的方法,他印象深刻。
第四轮:
这一轮是和另一个团队的SDM
- 在不使用额外空间的情况下分隔列表中的偶数和奇数。
- 一种设计问题。给定两天的亚马逊日志文件。他让我找到这两天都登录的用户。使用 Hashmap 进行了讨论,他想进一步优化我使用 trie 给出了解决方案,对其结构几乎没有修改
struct Trie {
int count[2],
bool isleaf;
Trie *child[26];
Trie() {
count[0]=count[1]=0;
isleaf = false;
for(int i=0;i < 26;i++)
child[i]=NULL;
}
};
- 他很欣赏我,然后离开了。
第五轮(提高标准)
- 讨论了我的项目及其扩展。他给了一些建议
- 序列化和反序列化二叉树。
我使用两个遍历顺序和预购来告诉方法。他让我直接编码,然后我向他解释,但他没有得到我的方法,他不断地问很多问题。最后我告诉使用带有标记的预遍历,他告诉了他知道那个解决方案。
我要感谢我的朋友和geeksforgeeks,他们一直在我身边帮助我,
亚马逊的所有练习题!