SDE-1 的亚马逊面试经验 |校外 2021
角色:SDE1
资料来源:naukri.com
在线回合: 2 道时间复杂度分析的编码题
- 类似于距离 Origin 最近的 K 坐标。 (堆)
- 对 2-Sum 进行了一点修改,但我以蛮力的方式做了,它通过了。
在最后基于行为的 MCQ 测试中。
5 天后,我收到一封电子邮件,其中提到我将与 HR 进行快速联系以进行 Rounds Process。
第1轮:
- 快速介绍
- BST 迭代器 https://leetcode.com/problems/binary-search-tree-iterator/(中)
- 基本计算器 https://leetcode.com/problems/basic-calculator/(硬)
- 我解决了这两个问题,但对于最后一个,我的代码不是 100% 完成,因为我们的时间不多了,但我给出了方法和最终的时间复杂度。
第 2 轮:
- Paint House https://www.lintcode.com/problem/515/?_from=['ladder']&fromId=['16'] (Leetcode 上的溢价,所以附上免费资源)
- 网格上的 BFS,问题就像给你一个 0,1 的 2D 矩阵和一个起始坐标,你必须覆盖所有 1,并告诉你需要多少最短时间才能做到这一点,如果剩下任何 1,则返回 -1 .
第三轮(行为,由 SDM III 拍摄):
- 这一轮就像简介一样,从 LP Questions 开始
- 你错过的最后期限。
- 一个你认为你无法实现但你做到了的目标。
- 您完成的一项最具挑战性的任务。
- CS 基础问题,例如 HTTP 与 HTTPS、线程与进程、 Java中的内存泄漏、Classfull IP 及其所有类之间的区别。
- 大约一周后,我收到一封电子邮件,说我下周要进行最后一轮比赛。
第四轮:
- 一个小介绍
- LP问题
- 1个编码问题(现在我想分享面试官本身的疑问,问题就像给你一个最多有2个孩子的二叉树,每个孩子最多可以有2个父母,你必须找到一个最大路径和从根到叶)
- 我问那个节点的结构是什么,所以他说你的想法。我写了这个:
Java
class Node { int data; Node left; Node right }
Java
int ans = 0; List
finalAns; private void dfs(TreeNode root, int csum, List ds) { if(root==null) return; if(root.left==null && root.right==null) { if(csum > ans) { ans = csum; finalAns = ds; } return; } ds.add(root.val); dfs(root.left,csum+root.val,ds); dfs(root.right,csum+root.val,ds); ds.remove(ds.size()-1) } pubic List solve(TreeNode root) { this.ans = 0; this.finalAns = new ArrayList (); this.dfs(root,0,new ArrayList ()); return this.finalAns; } - 所以他说是的,这是,(现在我很困惑这怎么会与父母有联系,也许我无法获得!)
示例测试用例:
1
/ \
2 3
/ \ / \
4 5 6
O/P: [1,3,6]
- 因此,我给出的第一个解决方案是正常的 dfs,基于我尝试从 root 到每个 Leaf 的每条路径,在该方法中,我采用 current_sum 和一个 global_sum 并相应地更新它。
Java
int ans = 0; List
finalAns; private void dfs(TreeNode root, int csum, List ds) { if(root==null) return; if(root.left==null && root.right==null) { if(csum > ans) { ans = csum; finalAns = ds; } return; } ds.add(root.val); dfs(root.left,csum+root.val,ds); dfs(root.right,csum+root.val,ds); ds.remove(ds.size()-1) } pubic List solve(TreeNode root) { this.ans = 0; this.finalAns = new ArrayList (); this.dfs(root,0,new ArrayList ()); return this.finalAns; } - 时间复杂度:O(超过N)我无法弄清楚,但我猜是O(N ^ 2)
- 所以,他告诉我要优化它,我告诉他我会做一些 Post Order 类型的 Traversal 并且从左到右我会带来答案。但他告诉我这行不通,所以我找不到更好的东西。
结论:对 LP 问题有信心,首先讨论蛮力。
判决:拒绝