java - 比较两个数组。返回值错误(一)

标签 java arrays methods return program-entry-point

我制作了这个方法,比较两个数组的数字,然后返回有多少个数字彼此相等,但无论有多少个数字相等,该方法每次都返回值1。 (两个数组的长度相同)。

public static void main(String[] args) {
    int a []  = {1, 4, 6, 7, 8, 10, 13};
    int b []  = {1, 2, 3, 4, 5, 6, 7};

    equal(a,b);

}


public static int equal(int[] a, int[] b){
    int j = 0;
    for(int i = 0; i< a.length-1;i++){

        if(a[i] == b[i]){
            j++;
        }
    }
    System.out.println(j);
    return j;
}

最佳答案

您的代码正在查找相同索引处的相等数字。

有多种方法可以找到交叉点的大小。

一个简单但 O(m*n) 的实现是为 a 的每个元素迭代 b 的所有元素。

如果数组已排序,您可以为两个数组使用单独的索引,当每个数组不再匹配时将其推进。这将是 O(m+n)。 (如果它们没有排序,您可以先对它们进行排序,成本为 O(m log m + n log n )。

如果每个数组没有重复的成员,另一种方法是根据集合差值的大小来计算交集的大小。一个例子是 http://ideone.com/6vLAfn 。关键部分是将每个数组转换为一个集合,并通过从另一个集合中删除一个集合来确定有多少个共同成员。

 int aSizeBefore = setA.size();
 setA.removeAll( setB );
 int aSizeAfter = setA.size();
 return aSizeBefore - aSizeAfter;

关于java - 比较两个数组。返回值错误(一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063820/

相关文章:

java - 如何在 spring 中的对象内包含的列表上创建 select 语句?

php - 搜索多维数组

C#:使用堆栈创建方法

java - 如何从异步值创建千分尺?

java - 如何让BorderLayout动态化?

arrays - Matlab:如何对二维数组进行排名并在另一个二维数组中标记排名?

带有散列参数的 Ruby public_send 方法(如果适用)

java - 如何在 Java 中的 Switch Case 中调用多个方法

java - 如何选择不符合Mongo中某些字段的文档使用Java?

c - 将元素存储和访问到嵌套结构的数组