代码之家  ›  专栏  ›  技术社区  ›  bobo

在预先排序的数组中查找给定值的索引

  •  3
  • bobo  · 技术社区  · 15 年前

    今天我去面试了,面试官问我如何在这样一个预先排序的数组中找到给定值(数字)的索引:

    $preSortedArr=array(23,32,36,41,45,54);
    

    他还说不允许使用递归。

    我认为函数应该如下所示:

    function findIndexByValue($preSortedArray,$value){            
    //some codes here       
    }
    

    你认为他对我有什么期望?

    编辑: 对不起,我忘了补充一句,原来他让我写伪代码,但我说我不知道。然后我试图用PHP编写它,但我认为他希望有一个独立于语言的解决方案。

    5 回复  |  直到 15 年前
        1
  •  5
  •   Steve Jessop    15 年前

    因为他说数组是预先排序的,所以他可能希望进行二进制搜索。在这个例子中,对于小数组,线性搜索(由于数组是排序的,所以可能进行了优化——如果找到更大的值,则退出并失败)当然是完美的。可能更快,如果重要的话。

        2
  •  3
  •   Gordon Haim Evgi    15 年前

    他可能在找

    • array_search 在数组中搜索给定的值,如果成功,则返回相应的键

    编辑 对于给定的数组,这个问题有点奇怪。除了使用PHP的本机函数之外,这样做没有意义。另一种选择是使用 while , next , key current 如果你想用手的话。这仍然不能解释为什么面试官注意到你不能使用递归。

        3
  •  2
  •   Tyler Carter    15 年前
    $key = array_search("23", $array);
    
        4
  •  1
  •   Tuomas Pelkonen    15 年前

    他可能没有寻找任何具体的答案。他可能想看看你如何思考和考虑不同的选择,并在选择你的实现方式之前解释它们的优缺点。

        5
  •  1
  •   user294770    15 年前

    最好的方法是使用 Binary search algorithm . 最坏情况下的复杂性是O(logn)