3


0

事前に並べ替えられた配列で特定の値のインデックスを見つける

今日、私はインタビューに行き、インタビュアーは、次のように事前にソートされた配列で特定の値(数値)のインデックスを見つける方法を尋ねました。

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

また、再帰の使用は許可されていないと述べました。

関数はこのようになるはずです。

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

彼は私にどのような解決策を期待していたと思いますか?

*編集:*申し訳ありませんが、彼が最初に擬似コードを書くように頼んだことを追加するのを忘れましたが、私は知らないと言いました。 その後、PHPで記述しようとしましたが、彼は言語に依存しないソリューションを期待していると思います。

5 Answer


5


彼は配列が事前にソートされていると言ったので、おそらくバイナリ検索を期待していた。 線形検索(配列が並べ替えられているため、可能な最適化-大きな値が見つかった場合は失敗して終了します)は、例の小さな配列ではもちろん完全に問題ありません。 それが重要であれば、おそらくより高速です。


3


彼はおそらく探していた

編集 _質問は、指定された配列に対してやや奇妙です。 PHPのネイティブ関数以外でこれを行う意味はありません。 別の方法として、手でやりたい場合は、「while」、「next」、「key」、「current」を使用します。 面接官があなたが再帰を使用してはいけないと言った理由はまだ説明できません。


2


$key = array_search("23", $array);


1


彼はおそらく具体的な答えを探していなかったでしょう。 彼はおそらく、あなたがさまざまなオプションをどのように考え、検討しているかを見て、その長所と短所を説明してから、その実装方法を選択したいと考えていました。


1


最善のアプローチは、http://en.wikipedia.org/wiki/Binary_search_algorithm [バイナリ検索アルゴリズム]を使用することです。 最悪の場合の複雑さはo(logn)です