今天,我去接受采访,面试官问我如何在预先排序的数组中找到给定值(数字)的索引,如下所示:
$preSortedArr=array(23,32,36,41,45,54);
他还说不允许使用递归。
我认为该功能应如下所示:
function findIndexByValue($preSortedArray,$value){
//some codes here
}
你认为他对我的期待是什么解决方案?
编辑:抱歉,我忘了补充说他最初要我写伪代码,但我说我不知道。然后我尝试用PHP编写它,但我认为他期待一种与语言无关的解决方案。
答案 0 :(得分:5)
由于他说数组是预先排序的,他可能期待二进制搜索。线性搜索(自阵列排序后可能进行优化 - 如果找到更大的值,则退出失败)当然在示例中的小数组上完全没问题。如果重要的话,可能会更快。
答案 1 :(得分:3)
他很可能正在寻找
array_search
- 在数组中搜索给定值,如果成功则返回相应的键 编辑 对于给定的数组,这个问题有些奇怪。除了PHP的本机功能之外,使用其他任何东西都没有意义。另一种方法是使用while
,next
,key
和current
,如果您想手动使用它。这仍然无法解释为什么面试官注意到你可能不会使用递归。
答案 2 :(得分:2)
$key = array_search("23", $array);
答案 3 :(得分:1)
他可能没有找到任何具体的答案。在选择实施该事物的方式之前,他可能想看看你如何思考和考虑不同的选择,并解释它们的优点和缺点。
答案 4 :(得分:1)
最好的方法是使用Binary search algorithm。最糟糕的案例复杂性是o(logn)