比较两个数组.错误的返回值(1)

tom*_*rge 0 java arrays methods program-entry-point return

我做了这个方法,比较两个数组的数量,然后返回多少个数字彼此相等,但无论有多少个数字相等,该方法每次都返回值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;
}
Run Code Online (Sandbox Code Playgroud)

And*_*mas 8

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

有几种方法可以找到交叉点的大小.

一个简单但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;
Run Code Online (Sandbox Code Playgroud)