2017-03-12 7 views
-1

forループを1つだけ使用して配列から重複を検索したい。私は2つのforループを使ってやりました。 Javaでこれをどうやって行うことができますか?1つのforループを使用して配列内の重複を見つける

duplicates = false; 
for (int i = 0; i < array.length; i++){ 
    for(int j = i+1; j < array.length; j++){ 
     if(name[i].equals(name[j])){ 
      duplicates = true; 
     } 
    } 
} 
+0

"私は2つのforループを使用していましたが、これをJavaでどのように行うことができますか?"現在あなたのコードは何も削除していません。それはすべてforループ内でduplicatesをtrueに設定します。 –

+0

あなたの質問は不明です。あなたが提供したコードは、重複が見つかった場合にのみフラグを設定し、重複は削除しません。あなたはあなたの質問を拡大できますか? –

+1

なぜHashSetを使用しないのですか? HashSetには重複を含めることはできません。 https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html。配列のすべての値をHashSetに追加し、それらを再び追加します。 –

答えて

1

あなたはおそらく2つのループを行う必要があります。以下のサンプルには重複がありません。このオプションの性能が高いことを保証するものではありません。パフォーマンスが賢明それは、JavaコレクションAPIの

Set setString = new LinkedHashSet(); 

    for(int i=0;i<array.length;i++){ 
     setString.add(array[i]); 
    } 

} 
1

を使用するよりも、生の配列で作業した方が良いです、私は重複が最初何であるかを知りたいです。では、どうすればHashSetなどを使わずにforループを1つだけ使用してこれを行うことができますか?それが私の目標です。

これはできません。


実際には、あなたが不正行為をしても可能です。

int len = array.length; 
boolean duplicates = false; 
for (int i = 0; i < len * len; i++){ 
    if (name[i/len].equals(name[i % len])){ 
     duplicates = true; 
    } 
} 

Look Ma ... only one loop

これはまだO(N^2)なので、実際には何も達成していません。

関連する問題