第 1 轮:在线测试(时长:2 小时 30 分钟)
- 它有大约 20 道与计算机科学基础相关的多项选择题和 2 道编程题。
- 编程问题是:
- 1) 找出由最大数量的不同元素组成的最小子串的长度。
- 2) 找出使用 3、5 和 10 枚硬币计价的多种方法。
- 大约 30 名学生被选入第二轮。
第二轮:第一轮 F2F(持续时间:50-55 分钟)
- 从通常的“告诉我一些关于你自己的事情”开始。面试官非常友好。
- 他向我询问了几种基于树的数据结构及其属性。 (T’s、BT’s、BST’s、AVLT’s 等)
- 他让我写一个函数,将树的根节点作为输入,如果树是 BST 则返回 1,否则返回 0。
- 我给了他一个 O(n) 时间复杂度和 O(log(n)) 或 O(树的高度)额外堆栈空间复杂度的线性方法。他对此很满意。
- 他给了我一个只包含 0、1 和 2 的数组,并让我对其进行排序。
- 我给了他 O(n) 时间复杂度和 O(1) 额外空间的计数排序方法。他问我能不能一次性完成。
- 我尝试了一段时间,在一些提示的帮助下,我能够编写出一种隔离方法。相关文章(3-Way QuickSort(荷兰国旗))
- 他给了我一个大小为 N 的奇怪数组,其中 N-1 个元素出现 K 次。剩下的一个元素只出现 1 次。找出只出现 1 次的那个元素。
- 我给了他一个基于散列的解决方案,时间复杂度和额外空间复杂度为 O(n)。然后他问我 std::unordered_map 和 std::map 在下面是如何实现的。我向他介绍了他们的情况。然后他问我是否可以在 O(n) 时间和 O(1) 额外空间内完成这个问题。
- 他告诉我要从位思考。然后通过举一些例子,我能够得出解决方案。 K = 3 的示例(查找出现一次的元素)
- 然后他问了我一些与古吉拉特邦(我的家乡)有关的问题。食物、旅游景点、旅行等等都有多好。这场讨论持续了 10 分钟。然后他问我在斋浦尔有什么好吃的地方(我的大学在斋浦尔)。我给出了一些建议。他非常友好,甚至告诉我我要派你参加第二轮 F2F。
第三轮:第二轮 F2F(持续时间:50-55 分钟)
- 通常的“告诉我一些关于你自己的事情。”我告诉他我是 Batch 中最好的反恐精英球员,他很感兴趣。他问我是否知道游戏是如何运作的。我能够给他满意的信息。
- 他让我向他简要介绍一下我上一轮的情况,我对这些问题的处理方式是什么。
- 他问我动态规划的基本思想。他问我关于“哪里?如何?是用于解决现实世界问题的图。”
- 他问我是否了解 Segment Trees 和 Fenwick Trees 或 Binary-Indexed Trees 以及它们的实现。他没有让我给它们编码。
- 他给了我一个邻接矩阵形式的图和一个单独的数组 A 用于节点的值。他告诉我根据以下转换来转换数组 A :
- 新节点值应等于该节点子图中奇值节点的总和与偶值节点的总和与节点值本身的乘积之和。即(new_node_val = old_node_val + PRODUCT(SUM(子图中的odd_node_value节点),SUM(子图中的even_node_value节点)))
- A 给了他一个简单的 DFS 方法。他告诉我,我是第一个给我解决方案并且很满意的人。
- 他告诉我我们要回答 Q 查询(Q <= 1e4)。在每个查询中,我们将得到一个数字 N (N <= 1e4),如果 N 可以表示为小于 X (X <= N) 的数字的幂之和,我们必须返回 1。此外,任何 1 次幂都是不允许的(否则求解没有意义,因为 N 始终可以表示为 N^1)。例如,对于 N = 242 和 X = 7:返回 1(如 242 = 1^2 + 3^2 + 6^3 + 2^4)。
- 他给了我一个提示,看看你总共可以用多少个数字来表示 N。 Total Numbers = (2^2, 2^3, …… 2^(log2(N)), 3^2, 3^3 , ……, 3^(log3(N)), ……, X^2, X^3, ……, X^(logX(N)))。结果证明这是很少的。
- 在这一点上,我能够将问题简化为找到具有给定总和(此处为 N)的子集。我给了他DP解决方案,他很满意。相关文章 子集求和问题
- 大约有 7 人被选中,我很高兴我能做到。事实证明,这对我来说是一次很棒的经历。面试官非常友好和乐于助人。