-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 的大小让您知道计数。

如果您只想要唯一值,您可以将数组转换为 aSet并执行相同的操作。

于 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。键是每个数组元素,值是它出现的次数。一旦您计算出每个数字出现的频率,您就可以将问题简化为比较两张地图。

每当您在两个地图中都有一个键时,您就会在两个数组中都有一个数字。这些值可以让您决定数字在两个数组中出现的次数。

于 2013-03-27T18:36:32.403 回答