最近 DirectI 访问了我们的校园,为三个配置文件提供了实习机会——
1.平台工程师
2. 应用工程师
3. 运维工程师
这个流程是针对前两个profile的,我没有申请Operations。
第 1 轮:在线编码轮(263 名申请人)
一季度。给定成本 C[i] 和 n 块巧克力的卡路里含量 P[i],找出一个人可以在 W 货币单位的预算中摄入的最大卡路里量。约束条件:W <= 1000,n <=100,C[i]<=100,P[i] <= 100。
Q2。给定 2 个相同长度的字符串s 和 p。 (长度<=16)
限定DIST(字符串,字符串B)= MAX(明显不同的字符中,b中不同字符)。
一个有效的操作是在 s 和 p 之间交换相同索引处的字符。例如:如果 s=”abaa” 和 p=”baab”,那么经过一次操作,我们可以得到 s=”aaaa” 和 p=”bbab”(在索引 1 处交换字符)。
如果 s 和 p 可以进行任意次数的所述操作,则找到 dist(s,p) 的最小值。
Q3。以以下方式给定具有 n 个节点的树 – 在数组 par 中,par[i] 表示树中节点 i 的父节点。 Root 始终位于索引 1 且 par[1]=0。此外,子节点的索引总是大于父节点的索引。
给定 q 个查询,处理每个查询 ->
a) ADD(x,y) :将值 y 添加到节点 x。
b) ADDUP(x,y) :将值 y 添加到从根到节点 x 的路径中的所有节点。
c) VAL(x) : 打印节点 x 的值。
d) VALTREE(x) :打印根为 x 的子树中所有节点的值的总和。
约束条件:1<=n<=1,000,000
1<=q<=1,000,000
那些至少解决了两个问题的人被列入候选名单。
第 2 轮:F2F 算法第 1 轮(31 名入围候选人)
仅包含 1 个基于算法的问题,接下来的两轮也是如此。不得不写代码。
问:给定一个 nxn 棋盘和一个骑士在它上面的位置 (x,y),它在 k 次移动后留在棋盘上的概率是多少。
第 3 轮:F2F 算法第 2 轮(20 名入围候选人)
只问方法。
问:笛卡尔平面中从 (0,0) 到 (R,C) 的点用 r、g 或 b 着色。使用这些点制作一个三角形,使得-
a) 所有三个顶点都是不同的颜色。
b) 三角形的至少一条边平行于任一轴。
c) 三角形的面积尽可能大。
输出最大可能的区域。
约束条件:1<=R<=1000, 1<=C<=1000
9人直接入围最后面试,4人直接被拒。其余 7 人被称为 Algo 第 3 轮。
第 4 轮:F2F 算法第 3 轮(7 名候选人)
给定 n 行草 H[n] 的高度。一个农夫做了以下操作k次->
选择开始索引 (s)、结束索引 (e) 和高度 (h)。将他的剪草工具固定在高度 h 处,并将草从行 s 修剪到行 e。意思是,对于 s 和 e 之间的 i 的每个 H[i],H[i]=min(H[i],h)。
在 k 次操作后打印所有高度。
注意 -> 如果 H[i] 为 6 且 h 为 4,则修剪后 H[i] 变为 4(不会减少 4)。
禁止 ->
a) O(nk) 解决方案。
b) 使用 Segment Tree(只有更新操作,所以 Segment Tree 有点矫枉过正)。
c) 使用 BIT。
预期时间复杂度 – O(nlogn)。
我在面试官拒绝之前给出了所有这些方法,然后给出了一个使用时间复杂度为 O(nlogn) 的堆的方法,但他想要一个更简单的方法。
这 7 名候选人中只有 1 名被要求参加最终面试(除了之前选择的 9 名候选人)。我在这一轮被拒绝了。
最终面试:电话(通过Skype,10名候选人)
我没有给这一轮,但这是他们问的-
1. 自我介绍。
2. 做过的项目,过去的实习。
3. DS 相关问题(6-7 左右)。
4. 与网络相关的问题(10-12 左右)。
5. DBMS和OS相关问题(10-12左右)。
6. 很少有人力资源问题。
最终选出了 4 名候选人,其中 3 名是平台工程师,1 名是应用工程师。