我必须在这里承认,我是喜欢在面试中提出算法问题的人之一,但我要强调的是,问题的实际答案是绝对无关紧要的。无论被访者是否知道答案,我都不会在乎。相反,对我来说,这个问题针对重要性的不同方面,如下所示-按重要性排序:
要求
此类问题故意未明确说明。在您的示例中,没有提供有关该序列的更多详细信息。如果您有一个受访者问您这些数字是否实际排序,那么这是一个好兆头。他有正确的心态向客户询问更多细节,这将有助于在较短的时间内找到更好的解决方案。候选人还可以考虑使用O(n)空间存储N个数字的数组,但是他不应该询问X和Y的更多详细信息。比如说X和Y在1到1000之间,那么可以肯定,并启动基于阵列的解决方案。但是,如果我告诉您间隔是1到10亿,那么问题就变成了完全不同的问题。让我再次强调,我不在乎解决方案。
标准技术
我不想雇用一个甚至都不知道O(n)意味着什么的程序员。如果您在该领域接受过体面的教育,那绝对是一个必须知道的事情。但是重要的是,不仅要知道它的含义,而且还要实际应用这些知识。在您的示例中,我希望应聘者意识到由于需要排序O(n log n),因此不允许他对数据进行排序(不问其他针对桶排序或其他O(n)排序方法的问题)一般来说。
同样,其他算法问题也针对标准技术,例如树或图遍历或递归。候选人可能会滑过其中一种技术,但印象不佳。但是,在这种情况下,我想更深入地了解候选人是否具有任何CS背景。当然,这取决于目标位置,但是通常不了解运行时复杂性,典型数据结构及其遍历的开发人员将无济于事。
应对问题的心态
提出问题后,您将密切监视候选人。他/他如何反应?你从谁对如何解决问题丝毫没有线索考生在这里得到最好的结果,在第一。在这方面,该问题检查了如果以后在工作场所发生类似情况会发生什么情况。在开发过程中,您可能会遇到这样的问题,即使您的候选人不能独自解决所有问题,也最好知道您的候选人如何处理这些问题。
示例:您不希望候选人在接下来的半小时内进入静音模式!检查他是否可以提出聪明的问题(请参阅要求),一旦发现自己无法做到,就检查他是否开始思考。甚至是一个“有趣”的反问,例如“我可以使用同事电话选项吗?” 是一个好兆头。
怎么回答
通常,您可以针对此类问题给出的最佳答案是反问题!马上说出答案基本上不会使整个事情成功,而且实际上根本不是一个好的答案,因为所有这些问题都暗示了折衷,这是您的答案所隐含的,而您却没有所需的信息来明智地做到这一点。交易。当然,不同候选人之间反问题的质量会有所不同。
作为关于面试问题的一般说明:反问很少是一件坏事。例如,在我自己的一次采访中,我被问到类似以下内容:“如果必须实现X,那么您会选择C ++还是Java,为什么?” -我只是反驳说“我仅限于这两个吗?”。为自己猜测一下,您会从面试官那里对这样的反问做出什么样的反应-以及使您真正向面试官展示您的能力的难易程度。
find the missing element in O(N) or better
意味着更好”是什么意思?似乎可以通过一个简单的while循环来解决这类问题,但是无论如何我还是不明白-它要么已经解决,要么没有解决,对吧?