Java:如何比较两个int []数组的非重复元素?

EstelleVeneer

您如何比较两个int []数组中的重复元素?

例如:int countDifference(int[] arrayA, int[] arrayB)将两个排序的数字数组作为输入,并返回仅出现在两个数组之一中的数字的数量。

例如:countdifference([2,4,6,8],[3,4,6,9])返回4,因为46都是重复的,其余的数字是2839

我得到了一种方法,该方法计算可用于一个数组的不同元素,但不能计算两个数组的非重复元素。

import java.util.HashSet;
import java.util.Set;

public class countDistinctArray {

  public static int distinctNumberOfItems(int[] array) {
    if (array.length <= 1) {
      return array.length;
    }

    Set<Integer> set = new HashSet<Integer>();
    for (int i : array) {
      set.add(i);
    }
    return set.size();
  }

  public static void main(String args[]) {
    int array[] = { 2, 4, 6, 8, 3, 4, 6, 9 };
    System.out.println(distinctNumberOfItems(array));
  }
}
猛禽

您可以使用二进制搜索来比较数组并查找差异。您需要以双向方式(<-->)进行比较,例如:

array1 --> array2  and  array2 --> array1

因为您需要总结集合的差异。让A和B为集合,我们需要找到:

(A-B) U (B-A)

二进制搜索解决方案如下。该算法的复杂度为O(log n)

private static int getDifferenceBetweenTwoArray(int[] array1 , int[] array2)
{
    int differenceCount = 0;
    //if you dont want to sort your original arrays, create temporary arrays
    int temp1[] = Arrays.copyOf(array1 , array1.length);
    int temp2[] = Arrays.copyOf(array2 , array2.length);
    Arrays.sort(temp1);
    Arrays.sort(temp2);

    for(Integer i : temp1)
    {
        if(Arrays.binarySearch(temp2, i) < 0)
            differenceCount++;
    }
    for(Integer i: temp2)
    {
        if(Arrays.binarySearch(temp1, i) < 0)
            differenceCount++;
    }   

    return differenceCount;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章