私はMyArr {1,3,5,7,9,2,4,6,8,10}
のような配列を持っています。私は、私が2に達するまで、"Not Found"
を繰り返して印刷する必要があります。それ以降は、残りの部分には"Found"
を印刷する必要があります。与えられた配列から要素を見つけるには?
私のアプローチは、インデックス2を返すArrays.BinarySearch(MyArr,2)
を使用することです。私はここからどのように達成するのか分かりません。
私はMyArr {1,3,5,7,9,2,4,6,8,10}
のような配列を持っています。私は、私が2に達するまで、"Not Found"
を繰り返して印刷する必要があります。それ以降は、残りの部分には"Found"
を印刷する必要があります。与えられた配列から要素を見つけるには?
私のアプローチは、インデックス2を返すArrays.BinarySearch(MyArr,2)
を使用することです。私はここからどのように達成するのか分かりません。
binarySearch
は、ソートされた(昇順で)入力配列に対してのみ機能し、入力配列はソートされません。
溶液#1:
ソート最初の配列。次に
binarySearch
はソートされた配列の要素の正しいオフセットを見つけるでしょう。
ヒント:Arrays
で他の方法で表情。
これは正しい解決策ではありません。実際の問題声明では、1)一致しない要素に対しては「見つからない」を印刷し、2)最初に一致するものを見つけたら「見つかった」を印刷することが必要です。ソリューション#1は、第1要件ではなく、第2要件にのみ対応しています。
実際、バイナリ検索では最初の要件を満たすことができません。
別名:バイナリ検索を実行できるように配列を並べ替える...ただ1回...非効率的です。検索で保存されるよりもソートに時間がかかります。複雑さの点では、並べ替えはO(NlogN)
になり、O(logN)
を検索すると全体の複雑さはO(NlogN)
になります。対照的に、単純な線形検索はO(N)
です。したがって、各種類のバイナリ検索をO(logN)
実行すると、 "ブレイクイーブン"になります。
溶液#2:
バイナリサーチ忘れ、アレイのすべての要素を介してステップループを書き込みます。
ヒント:for
ループは最高になりますが、for
ループのようなもの?
バイナリ検索は、ソートされた配列でのみ機能するため、使用できません。
アレイ上でを反復する必要があります。各要素について、目標値であるかどうかをチェックし、コードに結果を記憶させる必要があります。とは、結果の値に適した出力を出力します。
'binarySearch'は値を見つけられませんでした。それは貴重だったインデックスを見つけ出しました(ソートされた配列)ので、2番目の箇条書きが間違っています。 – Andreas
よろしく!私はこれまでに5つの答えを殺しました。最後に、私がアップ投票をすることができます(それは主に[私のコメント]と同じですので推測します(http://stackoverflow.com/questions/37085335/how-to-find-element-from-given-array#comment61715180_37085335) ?)。それは、何が間違っているのか、解決策を払うことなく、より良いやり方を教えてくれます。わーい! – Andreas
@andreas私は何を考えているのか分かりません。箇条書きを削除しました – Bohemian
あなたはこれまでに試したことを示すことができますか? –
このメソッドは['binarySearch'](https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch%28int []、%20int%29)と呼ばれています。 'BinarySearch'とjavadocは次のように言います:*配列は**ソートされなければなりません**。*あなたの配列はソートされていないので、' binarySearch'を使うことはできません。あなた自身が配列を繰り返し処理する時間ですが、実際はあなたの割り当ての大きな部分です。 – Andreas
誰がバイナリ検索を使用する必要がありますか?一度それを行うと、配列を繰り返し処理します。 –