2016-11-29 9 views
-2

複数の数字からなる配列があります。それらの中には、Javaのペア数(その配列で2回構成されています)があります。この配列2内の{2,5,7,8,2,3,5,6,5}が2回で構成され、そのペア番号であるとします。配列内のペア番号を検索

私はこの方法を試してみました:あなたが使用することができます

HashMap<Integer, Integer> hmap = new HashMap<>(); 
    for (int i = 0; i < arr.length; i++) 
    { 
     Integer c = hmap.get(arr[i]); 
     if (hmap.get(arr[i]) == null) 
       hmap.put(arr[i], 1); 
     else 
      hmap.put(arr[i], ++c); 
    } 
+0

ソート配列で、キーに基づいて侵害を維持し、各要素のチェックのために次の要素が同じであれば、マップ内 –

+0

プット、印刷はカウンターですべて= 2 –

+0

はまた、あなたが使用することができますマップのアプローチ –

答えて

1

は、私は2つの方法を考えることができ

List<Integer> collect = Stream.of(2, 5, 7, 8, 2, 3, 5, 6, 5) 
      .collect(Collectors.groupingBy(e -> e)).entrySet().stream() 
      .filter(e -> e.getValue().size() == 2).map(Map.Entry::getKey) 
0

をストリーミングします。まず、マップを使用することができます。このメソッドでは、配列の各要素をマップ内に配置し、反復するたびにその値をマップに挿入しているかどうかを確認できます。

2番目の方法はソートに似ていますが、配列内の各要素を次のすべての要素でチェックすることができます。一致したら直ちに戻り、終了します。このメソッドは、私が思うにマップメソッドよりも遅くなりますが、最初にソートしてから隣接する値を見つけるよりも速くなります。

+0

また、これはペアが1つしかないと仮定しています。「 –

+0

のペアを見つけて、配列内のすべての要素を次のすべての要素でチェックしてください。一致するとすぐに、位置2の値が、すでにチェックされている位置0の値と等価でないことを知っていますか?編集:うん、あなたのコメントの種類は私の質問に答える^^ – AxelH

0

実際のコードを掲載していない場合は、マップに置き、カウントを探します。しかし、2秒のカウントを確認するために注意する必要があります。その2だけではなく、4,6,8などのすべてのカウントもペアにつながります(この点については、これまでのところすべての答えとコメントに欠けています)。

0

あなたの投稿から、あなたのコードは良いです。見つかった各値のカウントを含むマップがあります。ちょうどあなたの出力を更新し、

は今、あなただけ

for(Integer i : hmap.keySet()){ 
    Integer cnt = hmap.get(i); 
    if(cnt > 1)} //or == 2 
     System.out.println(i + " -> " + cnt); 
    } 
} 

、あなたが望むものを印刷する必要があると(以上がある場合、カウントで)あなたは、各ペアの良い小さな入力を持っています。

+0

ええ、今私は論理とそのうまく動作している。ありがとうございます:) – Kaustav

+0

@Kaustavあなたは歓迎です、最初からすべての情報を与えることについて考えてください;);)あなたが必要とする答えを見つけたら、それを受け入れることをためらわずに答えのシステム)を閉じて質問を閉じます。あなたが有用であると答えたすべての回答をアップボートします。 – AxelH

+0

私は。おねがいします:) – Kaustav

0

プリミティブタイプを使用するプログラム

num [j] = '0'; //これは単なるプレースホルダ

int []num = {2,5,7,8,2,3,5,6}; 
     int counter = 0; 
     for(int i=0;i<num.length-1;i++){ 
      for(int j=i+1;j<num.length && num[i]!=0;j++){ 
       if(num[i] == num[j]){ 
        counter++; 
        num[j]= 0; 
       } 
      } 
      if(counter==1) 
       System.out.println("pair found for: "+num[i]); 
      counter = 0; 
     } 
+0

彼はすでにペアを見つけるための解決策を持っています。 – AxelH

+0

o/pは:2のペアが見つかりました: ペアが見つかりました:5 // 5が発生しました3(もしnum [i] = 0ならばループを破る必要があります。どのようにそれがペアになることができる配列の時間ですか? – Kaustav

+0

@AxelH私は最初に質問を開きましたが、私はその時点でハッシュマップコードを見つけませんでした。私はブラウザをリフレッシュするのを忘れました。ごめんなさい。私は答えを修正した – divine