第一个基于 CGPA >= 7.5 的入围名单,并且只有 CSE 学生被允许参加面试。他们(DE-Shaw)有两个阶段的选择程序。
技术访谈:
他们首先让我介绍自己,然后问我的兴趣。我告诉他们我的情况,并提到我的兴趣领域是数据结构和算法。然后他们开始讨论 DSA。
问 1)。使用两个 Queue 实现 Stack。
Q 2).使用两个堆栈实现队列。
这两个问题都很简单,但您应该彻底了解如何实现以及我们应该对特定查询和工作代码采取什么行动。
然后他们让我为两个问题编写代码并分析每个操作的时间复杂度。
(建议:阅读这本书数据结构和算法变得容易——Narasimha Karumanchi 彻底理解数据结构的基础……)
在此之后,他们问了我的项目(基于操作系统)并问了我以下问题:
1)。你在你的项目中做了哪些以前没有的事情?
2)。它如何影响现实世界的应用程序?
3)。您在项目中遇到了哪些困难?
4)。如何实现实时操作系统?
……关于它的更多其他东西。
并询问了更多关于操作系统的问题。
(建议:不要提及你的贡献很少或不完全了解该项目的项目。他们不希望实习生提供很多项目,但他们想知道你在项目中付出了多少努力以及如何了解您的项目……准备好所有东西……。)
再说一次,他们问了一个很好的基于算法的问题(一步一步,他们提高了难度)。
他们说…
您有一个包含一些整数的数组大小。您必须返回数组元素(包括)的第 L 个索引与第 R 个索引的总和。
我只是写了一个函数,它将在给定的范围内运行并返回总和。
每个查询的时间复杂度:O(RL)
他们要求我进一步优化此解决方案……因为他们对我的解决方案不满意。
过了一会儿,我想出了一个使用另一个数组的解决方案,比如 cumm_Array,我将在 cumm_Array[i] 中存储第 1 到第 i 个索引元素的所有元素的总和。对于每个查询,我将返回 (cumm_Array[R]-cumm_Array[L-1])。
我不能阻止我写代码,因为我喜欢编码…………。
这是代码:
//here all array is 1-Based indexed
int cumm_Array[size+1];
void cumm_Sum(int arr[],int size){
int cumm_Array[0]=0;
for (int i=1;i<=size;i++)
cumm_Array[i]=arr[i]+cumm_Array[i-1];
}
int Query(int L,int R){
return (cumm_Array[R]-cumm_Array[L-1]);
}
每个查询的时间复杂度:O(1)
全时间复杂度:O(N*1)
现在他们对我说……你必须执行两个查询。
查询 1)。将第 i 个元素更新为给定值,例如 x
查询 2)。计算给定范围的总和
现在问题变得困难。
(提示:这可以使用二叉索引树或段树来完成..如果你不知道也不要担心..
这是我的代码……
段树实现。
二叉索引树实现。
现在查询 1 的时间复杂度:O(logN)
查询 2 的时间复杂度:O(logN)
现在他们让我为此编写伪代码……我已经做到了……这之后,我看到了他们的面孔。他们看起来印象深刻,因为他们没想到我会做这些事情……因为为了解决第一个问题,我花了 10-15 分钟来解决每个问题。
人力资源面试
在这个阶段,他们问了我们自己,一些常规的 HR 问题。在这之后,他们问了一些谜题和更多关于我们一般意识的东西。
建议:保持冷静和专注。
首先,他们对我说,“现在你处于第二阶段”。他们问我关于一期的采访经历。
之后,他们根据需要数据结构概念的实际问题提出了第一个问题。
问 1)。假设您必须存储buyer_id、buying_time、dept、beyer_contact_info。设计一个数据结构来存储这些信息。
现在他们添加了更多的问题来使其变得困难。他们说,“你必须找到一个在每个部门每半小时购物花费最多的买家”。他们再次要求从先前选择的买家名单中找到一个花费最多的买家。
后来他们让我宣布获胜者提供了更多的限制。这个问题在整个面试过程中非常沉重。
他们让我快速为这个问题编写代码(不是伪代码)并分析时间复杂度和空间复杂度。
问 2)。为十进制值为 5 的倍数的二进制输入(0 和 1 的字符串)设计 DFA。
问 3)。你有两个数字,比如 A 和 B。你有一个给定的范围,比如 [L, R] 在给定范围内设置 B 中的所有位,所有位都设置在该范围内的 A 中。 (没明白,有时他们会提到一些似乎很模棱两可的事情,他们想知道您如何解决此类问题……如果您遇到此类情况……请要求更多说明……)
我根本没有得到一个问题。他们嘲笑我………….lol..我也觉得很伤心。最后,我怎么了。
然后他们就这样澄清了……
您必须设置 B 的二进制表示中的所有位,这些位在 A 的给定 Lth 位置到 A 的二进制表示中的 Rth 位置之间设置。
然后我向他们展示了一个例子……(如果你也没有看到例子)。
A = 10(1010)
B = 13(1101)
[L,R] = [2,3]
bit position 1 ,2 , 3 ,4
A 1 0 1 0
B 1 1 0 1
在这里您可以看到在范围 [2,3] 之间,A 的第二个位置位未设置,在 B 的第二个位置中设置,而 A 的第三个位置位将不受影响。你应该设置一个的只有第二位
最终答案:A = 14(1110)
注意:不要取消设置 A 中已经设置的位,也不要执行任何超出范围的操作。
解决方案:
我给他们的第一个解决方案,只需将 A 和 B 转换为二进制,并按照问题中提到的进行所需的操作,然后从答案中取回十进制值。
然后他们要求我进一步优化,说计算机以二进制形式存储所有信息。
我只是想这个问题可以通过简单的异或运算来完成,因为我已经解决了一些位问题。
过了一会儿,我想出了一个时间复杂度恒定的解决方案。
我设计了一个位掩码,在给定范围内全为 1,并与 B 进行 AND,最后与 A 进行 OR;
以编程方式选择这样的位掩码并不是那么困难,所以留给读者。
祝你好运