Algorithm 技术面试问题:我的方法正确吗?
最近我接受了一家软件公司的采访。我自己没有通过第一轮 也许我在形成想法或解决问题方面太慢,对我面试的公司来说不够好。 我想对我的面试有第二个意见,我找不到比这个更好的人了 stackoverflow社区 所以这次采访是一次基本的采访Algorithm 技术面试问题:我的方法正确吗?,algorithm,Algorithm,最近我接受了一家软件公司的采访。我自己没有通过第一轮 也许我在形成想法或解决问题方面太慢,对我面试的公司来说不够好。 我想对我的面试有第二个意见,我找不到比这个更好的人了 stackoverflow社区 所以这次采访是一次基本的采访 导言 你为什么申请这个职位 一个技术问题(详情如下) 你用过的最差的软件是什么?为什么?改善 你用过的最好的软件是什么?为什么要改进 原始技术问题(由面试官提出) 给定一个数字范围M…..M+N-1,我构造一个大小为N的数组,并用一个数字替换该数组中的一个元素。 您
记者:没必要 在替换元素之前,我们知道数组吗?
记者:没有 然后我开始写一些伪代码(一边大声思考)。我立即意识到,如果原始阵列中有重复项,它将无法工作。所以我有一段时间一直在思考如何解决这个问题。最后我问了一些重要的问题 Q如何从范围中选择元素以形成阵列?
采访者:我有一系列的数字M,M+1,M+2…M+N-1。一个数字只拾取一次。我形成了一个大小为N的数组(这基本上意味着没有重复项,范围内的所有元素都被拾取) 你用什么号码替换它?是否在同一范围内?
记者:是的 然后一切都清楚了 这就是他的意思:
我有一系列从M开始的数字,比如M,M+1,M+2,M+3…M+N。我形成一个大小为N的数组,这样每个元素只拾取一次,并且原始数组没有任何重复项。我用相同范围内的数字替换数组中的一个元素。找出我从系列中挑选的要替换的内容 这相当于在数组中查找重复项。在这里,在替换之后,我们可以很容易地在O(N^2)时间或O(nlogn)时间内找到一对副本。我给了他两种算法 最后我忍不住问他:“我在这个问题上表现如何?他说你花了很多时间来回答。” 显然,他不满意我对这个问题的态度。
在回答这个问题时,您认为我应该采取什么不同的做法?如果我答对了问题,您可以在O(n)时间内解决这个问题
for(i=0;i<N;i++)
{
if(h[a[i]-M] == 1) return i;
h[a[i]-M] == 1;
}
for(i=0;i这是一个经典的面试“谜语”。事实上,使用ralu描述的技巧在O(n)中很容易解决
我们在《数据结构1》中教授的一点是,当您的域受到限制时,可以将其用于比O(nlogn)更好的函数[显然,在没有任何额外知识的情况下对域进行排序不可能在少于O(nlogn)的时间内完成].所以,当你知道自己的领域时,应该在你的脑海中某处打开一个小红灯:-)
我认为你应该立即指出关于复制品的问题。这会清楚地表明问题的形式不正确。否则,他只是认为你很慢(尽管事实上这是他的错…)
我还认为问题4、5是很好的问题。它们显示了申请人的经验以及申请人的想法。因此,可能是因为你在面试中说了些什么而导致面试失败。由于没有对允许使用的内存量进行限制,所以存在O(N)解决方案:将大小为N的数组A初始化为全零。查看列表中的每个元素b,并标记A[b-M]=1。然后,如果A[c]=0,则遍历A并返回c。这里的任何人都绝对不可能正确回答您的问题。您是在事后以清晰的方式写下这个问题的
- 也许你在面试中漫无边际,或者没有像这个问题那样清晰地表达自己
- 也许你没有足够快地提出正确的问题
- 也许你在被指点后理解得不够快(或者不如你的竞争对手快)
- 也许面试官不喜欢你在思考问题之前就开始编写代码
我接受过无数次采访,我觉得我要采访的人知道我问的问题的答案。他们就是不能告诉我:他们的思维混乱或慌乱。有些人的思维过程明显超出了他们的口,他们困惑地跳来跳去。我敢打赌,他们中的一些人会走开,开始思考你的答案并不完美
我不能告诉你你是否做了这些事情;也许你的面试官不讲道理。我知道我的面试不太顺利,因为我觉得这不是我自己的错。但现在,我发现