【发布时间】:2011-05-09 12:36:06
【问题描述】:
昨天我在面试中被问到以下问题:
考虑一个 Java 或 C++ 数组,比如 X,它已排序并且其中没有两个元素是相同的。如何最好地找到一个索引,比如i,这样该索引处的元素也是i。那是X[i] = i。
作为澄清,她还给了我一个例子:
Array X : -3 -1 0 3 5 7
index : 0 1 2 3 4 5
Answer is 3 as X[3] = 3.
我能想到的最好的方法是线性搜索。面试后我虽然对这个问题说了很多,但找不到更好的解决方案。我的论点是:具有所需属性的元素可以在数组中的任何位置。所以它也可能在数组的最后,所以我们需要检查每个元素。
我只是想从这里的社区确认我是对的。请告诉我我是对的:)
【问题讨论】:
-
一些类似于二分搜索的算法应该会给出更好的解决方案
-
我认为亚马逊不希望你公开他们的面试问题......
-
4 个收藏夹?! 5个赞?!您(支持者、最喜欢的点击者)来自哪里?这是一个非常简单的问题。我不会找一个对二进制和插值搜索一无所知的求职者。
-
Peter:我已经编辑删除了公司名称。 Alexey:我知道二分搜索,但想不出如何应用它。
-
@Alexey:如果他们只是想知道应聘者是否知道二分搜索,那么他们只会要求找到
i,其中x[i] = 3在排序后大批。这个问题很有趣。如果应聘者立即回答,他们很可能以前见过,但他们可能很聪明,并立即发现了额外的技巧。如果候选人在 30 秒后回答,他们就发现了诀窍。如果他们不能回答,他们就没有发现它。要将聪明人和知识渊博的人区分开来,请用float的数组询问它,看看您是否得到相同(现在不正确)的答案;-)