编码回合
有 2 道编码问题(每道 10 分)和 20 道来自各种核心概念(OS、DS、算法、DB、C 语言等)的 MCQ。
- 问题 1: https : //www.geeksforgeeks.org/given-a-string-print-all-possible-palindromic-partition/给定一个字符串,找出给定字符串的所有可能的回文分区。
- 问题 2:给您一个大段落和 N 个单词。您必须找到该段落的最小长度子段落,其中包含以任何顺序包含所有这些 N 个单词。(不区分大小写)
22名学生入围面试。
面试第一轮
面试官要求自我介绍,然后他要求解释我的项目,其中一个是详细的。然后他给了我 2 个编码问题
问题 1:给定一个排序的整数数组(可能包含重复项),您应该编写一个函数来返回元素的第一个索引。
例如 arr = [1,2,2,2,3,3,3,4] val=3 ;答案 = 4
答:这是一个基本的二分查找,除了你不仅要检查当前元素是否是mid,还要检查它的前一个元素是否小于它(如果前一个元素存在),然后才返回mid。
否则在左侧重复,直到满足上述条件。
问题 2:给定一个二叉树,检查它是否是二叉搜索树?检查 BST
在纸上写出整洁的代码非常重要。面试官在代码上干运行了几个例子。
面试第二轮
面试官问了我之前的面试和问题。
后来他给了我2个编码问题。
问题 1:给定具有 arr[j] – arr[j-1] 是 1,0,-1 和搜索值的属性的整数数组,提供有效的搜索机制。
答:最简单的方法是执行 O(n) 的线性搜索。然后我沿着二进制搜索的思路思考,但是由于数组的属性,我们不能分割和递归。
一段时间后,我想出了一个方法,它从第一个元素开始,将每个元素与搜索值进行比较,并通过当前值和搜索键的绝对差来增加其位置。
这是最坏情况下的 O(n) 算法,但在一般情况下比线性搜索好得多。
问题 2:给定一个整数数组(允许重复),返回它是否是一组连续整数?
输入:5,2,3,6,4,4,6,6 输出:是(因为它来自 [2,3,4,5,6] 的集合)
答:首先,我给了他一个基于散列的方法。最初,对所有元素进行散列,然后选择第一个元素并以 1 递增,直到找到散列中不存在的值。类似地,从第一个值开始递减 1 并得到计数。如果计数等于散列大小,则为真,否则为假。
它是 O(n) 时间复杂度和 O(n) 空间复杂度。
他让我把空间复杂度提高到 O(1)。
我尝试了很多,但没有找到解决方案。然后,他通过给出提示并使其成为数组中的重复检测问题来简化问题,而无需使用任何额外空间,前提是数字在 [0,length_of_array -1] 范围内。
这可以通过以 arr[j]%n 和 make arr[arr[i]] = arr[arr[i]] + n*arr[i] 的形式访问索引 j 处的元素来完成。因此,如果在任何阶段 arr[j]/n > 1 意味着我们更早访问过它。他对这个解决方案很满意。
DS 问题
- 给出您更喜欢哈希表而不是 BST 的用例,反之亦然?
- 在哈希表和 BST 中重复插入的情况下会发生什么。它对搜索的复杂性有什么影响?
我回答了这些,他对答案很满意。
面试官很安慰我们,并给出线索指导我们解决问题。