2016-05-07 21 views
0

私はMyArr {1,3,5,7,9,2,4,6,8,10}のような配列を持っています。私は、私が2に達するまで、"Not Found"を繰り返して印刷する必要があります。それ以降は、残りの部分には"Found"を印刷する必要があります。与えられた配列から要素を見つけるには?

私のアプローチは、インデックス2を返すArrays.BinarySearch(MyArr,2)を使用することです。私はここからどのように達成するのか分かりません。

+5

あなたはこれまでに試したことを示すことができますか? –

+2

このメソッドは['binarySearch'](https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch%28int []、%20int%29)と呼ばれています。 'BinarySearch'とjavadocは次のように言います:*配列は**ソートされなければなりません**。*あなたの配列はソートされていないので、' binarySearch'を使うことはできません。あなた自身が配列を繰り返し処理する時間ですが、実際はあなたの割り当ての大きな部分です。 – Andreas

+0

誰がバイナリ検索を使用する必要がありますか?一度それを行うと、配列を繰り返し処理します。 –

答えて

0

binarySearchは、ソートされた(昇順で)入力配列に対してのみ機能し、入力配列はソートされません。

溶液#1:

ソート最初の配列。次にbinarySearchはソートされた配列の要素の正しいオフセットを見つけるでしょう。

ヒント:Arraysで他の方法で表情。

これは正しい解決策ではありません。実際の問題声明では、1)一致しない要素に対しては「見つからない」を印刷し、2)最初に一致するものを見つけたら「見つかった」を印刷することが必要です。ソリューション#1は、第1要件ではなく、第2要件にのみ対応しています。

実際、バイナリ検索では最初の要件を満たすことができません。

別名:バイナリ検索を実行できるように配列を並べ替える...ただ1回...非効率的です。検索で保存されるよりもソートに時間がかかります。複雑さの点では、並べ替えはO(NlogN)になり、O(logN)を検索すると全体の複雑さはO(NlogN)になります。対照的に、単純な線形検索はO(N)です。したがって、各種類のバイナリ検索をO(logN)実行すると、 "ブレイクイーブン"になります。

溶液#2:

バイナリサーチ忘れ、アレイのすべての要素を介してステップループを書き込みます。

ヒント:forループは最高になりますが、forループのようなもの?

+0

配列を最初に並べ替えると、結果が不正になります。解決策は 'Not Found'を5回、' Found'を5回印刷します。ソートすると、数字2は別の位置にあり、出力は「見つからない」1回、「見つかった」9回となります。 – Andreas

+0

あなたの答えの2/3は、使用できないソートの解決策ですか? – Andreas

+0

はい。そして、それはOPが理由(複数の!!!)を理解するのに有益です。なぜ彼は彼/彼女ができない/してはいけないのか。 –

4

バイナリ検索は、ソートされた配列でのみ機能するため、使用できません。

アレイ上でを反復する必要があります。各要素について、目標値であるかどうかをチェックし、コードに結果を記憶させる必要があります。は、結果の値に適した出力を出力します。

+1

'binarySearch'は値を見つけられませんでした。それは貴重だったインデックスを見つけ出しました(ソートされた配列)ので、2番目の箇条書きが間違っています。 – Andreas

+1

よろしく!私はこれまでに5つの答えを殺しました。最後に、私がアップ投票をすることができます(それは主に[私のコメント]と同じですので推測します(http://stackoverflow.com/questions/37085335/how-to-find-element-from-given-array#comment61715180_37085335) ?)。それは、何が間違っているのか、解決策を払うことなく、より良いやり方を教えてくれます。わーい! – Andreas

+0

@andreas私は何を考えているのか分かりません。箇条書きを削除しました – Bohemian

関連する問題