2017-07-13 9 views
-8

Javaの元の配列に2回以上しか要素を含まない一意の配列を印刷するにはどうすればよいですか?たとえば、配列a = {1,2,2,2,3,4,5,5}があり、出力は{2,5}である必要があります。配列だけを使用する必要があります。一意の要素を複数回繰り返し印刷する

私は質問を試みてきたし、これは私がこれまで何をやったかである:

for (int i = 0; i < a.length; i++) { 
    int j; 
    for (j = 0; j < i; j++) { 
     if (a[i] == a[j]) break; 
    } 
    if (i == j) System.out.print(a[i]+" "); 
} 

出力は、アレイ内のすべてのユニークな要素ですが、私は、具体的に繰り返されるものを印刷しようとしています一回以上。

+2

2 5はあなたが最初にあなた自身の宿題を自分で実行しようとするのが参考になると思いますか?そして、いくつかの集中ヘルプに問題があったコードを投稿してください。 – Kon

+1

forループはあなたの友人です... –

+1

あなたは何をやったのですか?私たちはあなたの宿題をするためにここにいません –

答えて

0

入力配列にComparableまたはそれ以外のプリミティブ型の要素が含まれていると仮定して、これらの手順を実行できます。最終的にすべての鎖の最後の要素がlength > 1であることを目指しています。

  1. ソートArrays.sortを使用してアレイ(必要な場合)。
  2. を2番目の要素から順番に並べ替えます。各要素について:前の要素が現在の要素に等しい
    1. 場合、 後続要素が現在の要素に対してない等しい(あるいは後続の要素が存在しない場合)...
    2. 次に、が現在の要素を出力します。

注:HashMapへのアクセスを持っていた場合、O(n)は、このOのバージョン(N)(ログ)アルゴリズムが存在することになります。

は、ここでは、コードである:

public static void printDuplicates(int[] a) { 
    Arrays.sort(a); 
    for (int i = 1; i < a.length; i++) { 
     boolean precIsEqual = (a[i-1] == a[i]); 
     boolean succIsEqual = (i+1 != a.length) && (a[i+1] == a[i]); 
     if (precIsEqual && !succIsEqual) { 
      System.out.print(a[i] + " "); 
     } 
    } 
} 

Ideone Demo

出力:

関連する問題