-3

例えば:

int[] a = [0,1,2,3,4,5];
int[] b = [3,4,5,6,7,8];

count = 3;

配列は連続した数値である必要はありません。これらの配列間で等しい値の数を取得するにはどうすればよいですか?

編集:だから私は次のことを試みました:

List<int[]> w = Arrays.asList(winning);
List<int[]> s = Arrays.asList(F1Select);            
w.retainAll(s);
int equalNums = w.size();

しかし、retainAll 行で次のエラーが発生します。

Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(Unknown Source)
    at java.util.AbstractList$Itr.remove(Unknown Source)
    at java.util.AbstractCollection.retainAll(Unknown Source)
4

3 に答える 3

4

リストに変換するだけで、retainAll を使用して交点を見つけることができます。

List<Integer> aList =  Arrays.asList(a);
List<Integer> bList =  Arrays.asList(b);
aList.retainAll(bList);
return aList.size();

aList には、bList にもあるアイテムのみが含まれ、aList のサイズによってカウントがわかります。

一意の値のみが必要な場合は、配列をに変換Setして同じことを行うことができます。

于 2013-03-27T18:35:44.567 に答える
1

これを試して :

 Integer[] a = new Integer[]{0, 1, 2, 3, 4, 5};
 Integer[] b = new Integer[]{3, 4, 5, 6, 7, 8};

  List<Integer> list1 = Arrays.asList(a);
  Set<Integer> commonSet = new TreeSet<Integer>();
     for (Integer i : b) {
         if (list1.contains(i)) {
           commonSet.add(i);
            }
        }

        System.out.println(commonSet.size());
于 2013-03-27T18:43:17.333 に答える
0

計算中に追加のスペースを使用できる場合O(m + n)は、配列ごとに HashMap を保持できます。キーは各配列要素で、値はそれが何回発生するかです。各数値が発生する頻度を計算したら、問題を単純化して 2 つのマップを比較します。

両方のマップにキーが存在する場合は常に、両方の配列に存在する番号があります。値により、両方の配列に数値が存在する回数を決定できます。

于 2013-03-27T18:36:32.403 に答える