标准:
- 允许的分支 CS/IT
- 直到第四学期:GPA>=8.5
大约有 45 人在这里入围。
第 1 轮:这是在 AMCAT 上进行的在线轮次。它由 3 个部分组成。
第 1 部分:它有 14 道逻辑推理题,非常简单。解决这些问题不需要太多的练习。每个部分都有一个计时器。本节有 15 分钟。
第二部分: 16道不算太难的定量题,20分钟完成。
第 3 节:它是关于编程的。每个人都有不同的套餐。有两个编程问题需要在 1 小时内解决。
本题要慎重处理边角案例。
step1: find a substring of str1 of length 2 and
reverse the substring, and str1 becomes str1' (str1' != str1)
step2: find a substring of str1' of length 3, and
reverse the substring, and str1' becomes str1'' (str1'' != str1')
step3: find a substring of str1' of length 4, and
reverse the substring, and str1' becomes str1'' (str1'' != str1')
以下步骤类似。
字符串长度在 [2, 30] 范围内
要求:每一步必须执行一次,不能跳过前面的步骤执行下一步。如果可以将 str1 更改为 str2,则输出所需的最小步数,否则输出 -1。
由于这个问题的约束非常少,我使用普通递归解决了它。
我能够完全解决这两个问题。能够几乎完全准确地解决第一两个部分并完成 1 个编码问题的学生被列入面试的候选名单。
在线轮结束后,24人被选中进行面试。
第二轮:面试时长超过 1 小时。首先,他让我介绍一下我自己,除了简历中提到的内容。
我在简历中提到了两个关于 ML 的项目,面试官似乎印象深刻,让我向他简要解释一下。没有问任何后续问题。然后他直接跳到编码问题:
- 给定一棵二叉树,在树的每一层打印备用节点。
输出格式:
The first node at each level must be printed always. Each level should begin with a new line.
我讨论了我使用队列进行树的级别顺序遍历的方法,并保留一个变量来指示下一个级别和一个标志变量(在每次迭代后不断否定)以打印备用节点。
面试官对我的方法很满意,他让我写同样的代码。他让我在某些情况下试运行以检查代码。 - 树的前序、后序和中序遍历的伪代码。
- 检测链表中的循环。我在 O(n) 的时间和空间中讨论了基于地图的方法,但面试官要求一个具有 O(1) 空间复杂度的算法。然后我告诉他弗洛伊德循环算法。他印象深刻,并要求我为它编写代码。
- 作为最后一个问题的后续,他还要求我从LL中删除循环。(问了唯一的方法,不需要代码)
- 给定一个正整数数组,设计一个算法来打印子数组的开始和结束索引,总和为 k(k 作为输入给出)。
预期解决方案: O(n) 时间代码被询问 - 他让我快速解释酸的性质。
总的来说,面试官对讨论持开放态度,并在需要时提供提示。这是最后一轮,结果公布后,有6名候选人被选中进行实习,我就是其中之一。