ソートされた配列で値xが見つかったすべてのインデックスを出力するメソッドを作成する必要があります。
アレイを0からN(アレイの長さ)までスキャンした場合、実行時間は最悪の場合O(n)になることを理解しています。メソッドに渡される配列がソートされるので、これはO(log n)になるので、二分探索を利用できると思います。ただし、これは、配列に一意の値がある場合にのみ機能します。バイナリ検索は、特定の値の最初の「検索」の後に終了するためです。ソートされた配列でxを見つけるために二分探索を実行し、このインデックスの前後のすべての値をチェックすることを考えていましたが、配列にすべてのx値が含まれている場合、それほど良いとは思えません。
私が求めているのは、O(n)よりも優れているソートされた配列内の特定の値のすべてのインデックスを見つけるためのより良い方法があると思いますか?
public void PrintIndicesForValue42(int[] sortedArrayOfInts)
{
// search through the sortedArrayOfInts
// print all indices where we find the number 42.
}
例:sortedArray = {1、13、42、42、42、77、78}は次のように出力します:「42はインデックスで見つかりました:2、3、4」