📌  相关文章
📜  SDE-1 的亚马逊面试经验 |校外 2021

📅  最后修改于: 2022-05-13 01:58:24.977000             🧑  作者: Mango

SDE-1 的亚马逊面试经验 |校外 2021

角色:SDE1

资料来源:naukri.com

在线回合: 2 道时间复杂度分析的编码题

  1. 类似于距离 Origin 最近的 K 坐标。 (堆)
  2. 对 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 问题有信心,首先讨论蛮力。

判决:拒绝