📜  DE Shaw 面试经历

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

DE Shaw 面试经历

2020 年 8 月 21 日 – DE Shaw 访问 VIT, Vellore 担任质量与测试工程职位。 CGPA 截止分数为 7.0,第一轮在线比赛有 1500 多名学生参加。

在线第一轮——这一轮在 Hackerrank 门户中进行,总时长 95 分钟,分为 4 个部分。

第 1 部分 -能力部分:28 分钟的 14 个问题。问题适中,不太难解决。但我有点太紧张了,完全搞砸了,我想我在 5-6 左右解决了。这些问题是定量推理和一般能力的混合体。

第 2 部分 –技术部分:12 个问题,共 17 分钟。这部分包括猜测输出问题、一般编程概念、SQL 问题,以及一些基于数据结构和算法的问题。我认为我在一些问题上花费了太多时间,而不是转到下一个问题上。我设法解决了5-6。

第三部分 -有 2 个编码问题。第一个问题分配了 20 分钟,第二个问题分配了 30 分钟。因为,我一直在做有竞争力的编码,我知道我可以在这部分做得很好。

(1) 给定一个正整数数组,找出仅由素数组成的子数组的数量 - 相当简单的问题,使用 Eratosthenes 筛并在 7 分钟内编码并通过所有测试用例。我建立了一些信心进入下一个问题。

(2) 这是一个难题。给定 2 个数组,数组 A(仅包含 0 和 1)和另一个相同大小的成本数组 B。我们需要以最低成本将数组 A 的所有元素转换为 1。对于数组 A 中的每个第 i 个元素,从 0 转换为 1 需要 B[i] 成本,但如果 A[i-1] 和 A[i+1] 为 1,则 A[i] 可以转换为 1,成本为 0 .返回将所有 0 转换为 1 的最小可能成本。我想了大约 12-13 分钟,但根本想不出任何最佳方法。比我为所有索引(蛮力方法)制定了一个 BFS 解决方案,令我惊讶的是,我通过了 9/13 测试用例。

第 2 轮有 18 名学生入围。

第二天中午12点开始。有2个面试官。这是一个代码对轮次,只是关于解决问题,持续了近 100 分钟,我得到了 5 个背靠背的编码问题。他们测试了我用实际隐藏的测试用例编写的 3 个问题的解决方案。没有对项目和核心主题提出任何要求。吨

(1) 给定一个 BST,将其转换为一个完整的 BST(如果所有层都被完全填充,除了可能的最后一层,并且最后一层的所有键都尽可能左,那么一棵树就是一个完整的二叉树)。我的面试官向我解释了这个问题。我正闲着。我没有想到任何事情。我将 BST 的解决方案编码为 AVL 树。他很固执,想要完整的树形配置。我放弃了,他没有给我任何提示。

(2) 给定一个字符串,求一个字符串的所有子字符串的个数,其中不超过 3 个唯一字符。告诉他们蛮力解决方案,即 n^2 方法。比,我告诉他们关于 2 指针方法和使用 hashmap 来存储唯一字符。快速编码解决方案并通过他们提供的每个测试用例。

(3) 给出一个 n 行 m 列 0 和 1 的矩阵。在每一行中,前几个单元格的值为 0,其余单元格的值为 1。问题是找到包含值 1 的列的最小索引。我跳过了 O(n^2) 并立即给出二进制搜索方法 O(n*logm)。他们要求我提供更好的方法。我想了一会儿,目前稍微优化了一些解决方案。采访后我意识到,如果我们对角线遍历矩阵,这可以在线性时间内完成。

(4) 给定一个网格。找到从位置 (0,0) 到 (n-1,n-1) 的最小移动。但是,网格会有一些障碍,我们最多只能通过k个障碍。自由位置将被标记为 0,障碍物将由 1 表示。我花时间想出了优化的 Dijkstra 并进行了一些修改。他们似乎很满意,因为我的代码通过了 39/41 个测试用例并获得了最后 2 个测试用例的 TLE。

(5)断字问题( https://www.geeksforgeeks.org/word-break-problem-dp-32/ )。首先对递归方法进行编码,然后他们要求进行更多优化。我添加了一个 dp 表来存储重叠解决方案的结果。通过了示例测试用例,并针对一些极端情况进行了测试。我现在真的很有信心,认为我已经完成并准备提交了。但是,他们想要更多的优化。现在,dp 解决方案给我们的优化是我们可以检查我们是否有可能从某个索引中分区字符串,如果不可能从该索引分区,dp 表将简单地返回 -1,我们不会检查它再次。但是,主要问题是它是否可能比下一个?我们确实必须再次从该索引中生成所有组合,这已经在之前计算过。所以,我们正在重复我们已经做过的事情。我们不存储已经从该索引生成的组合。为了更清楚我所说的,他们想要的是 :: given str = “aaaaaaaaaaa” dict = [“a”,”aa”,”aaa”,”aaaa”,”……”,] 。现在,如果 dp 从某个索引(比如 5)返回 true,当我们在递归树中再次访问它时,我们仍然会计算该索引的所有分区。在这里,虽然 index 5 将返回 true 至少有 1 个分区是可能的,但 suffix[5:len-1] 仍然有很多可能性,并且 dp 没有返回那些。我非常仔细地听取了他们的意见,并了解了我的 dp 解决方案的缺点。我的面试官希望我也返回所有可能的组合。再次花了一些时间,我又花了大约 20 分钟来改变一切并试运行。他们再次运行了我的代码,尽管我通过了(9/11)但在最后 2 个测试用例中出现了分段错误。

让我再次解释一下他们真正想从我这里得到什么,例如在一个标准的硬币找零问题中,我们的 dp[i][j] 不仅说明通过取前 j 个硬币是否可以得到 i 的总和,而是在事实上 dp[i][j] 还向我们说明了通过获取前 j 个硬币可以获得 i 总和的方式数量。他们想要这种优化。

一位面试官似乎很高兴,而另一位则没有。最后,他们问我是否有任何问题要问他们。我说不。我很高兴事情的进展。我真的很享受这些挑战。但是,这一轮后我被拒绝了,下一轮大约有6个人被要求参加。最终选择了2名实习生。