两个数组相交的最终结果中有两个重复数字

时间:2017-10-26 13:02:43

标签: java

所以,我的任务是交叉两个数组,但不允许在最终结果中有2个重复元素。我得到了这个代码,但它不能满足任务,因为如果它在每个数组中有2个相同的数字,在最终结果中它们都会出现。有什么建议吗?

static void printIntersection(int[] arr1, int[] arr2) {
    int m = arr1.length;
    int n = arr2.length;
    int i = 0, j = 0;

    while ((i < m) && (j < n)) {
        if (arr1[i] == arr2[j]) {
            System.out.print(arr1[i] + " ");
            i++;
            j++;
        } else if (arr1[i] < arr2[j])
            i++;
        else
            j++;
    }
}

static void printArray(int[] arr) {
    for (int i = 0; i < arr.length; i++)
        System.out.print(arr[i] + " ");
    System.out.println();
}

public static void main(String[] args) {
    int[] arr1 = {1, 2, 2, 4, 5, 6};
    int[] arr2 = {2, 2, 3, 5, 7};

    System.out.println("Array1:");
    printArray(arr1);

    System.out.println("Array2:");
    printArray(arr2);

    System.out.println("Union:");
    System.out.println();

    System.out.println("Intersection:");
    printIntersection(arr1, arr2);
    System.out.println();
}

2 个答案:

答案 0 :(得分:0)

您需要维护list/array以检查是否存在重复元素。 使用ArrayList是一个选项:

static void printIntersection(int[] arr1, int[] arr2) {
        List<Integer> list = new ArrayList<>();
        int m = arr1.length;
        int n = arr2.length;
        int i=0,j=0;

        while((i<m) && (j<n)) {
            if(arr1[i] == arr2[j]) {
                if(!list.contains(arr1[i]))
                {
                    System.out.print(arr1[i] + " ");
                    list.add(arr1[i]);
                }
                i++;
                j++;
            }
            else if(arr1[i] < arr2[j])
                i++;
            else
                j++;
        }
    }

N.B。:我还没有测试过你的算法。

答案 1 :(得分:0)

问题出在这一部分。 如果arr1中的元素与arr2中的元素匹配, 它会打印出来并增加两个计数器。

if(arr1[i] == arr2[j]) {
    System.out.print(arr1[i] + " ");
    i++;
    j++;
}

上述条件没有说明arr1本身中的重复元素。 您需要添加更多条件来处理它。

您的输入数组似乎已排序。 在这种情况下,您可以添加条件以仅打印值,并在j的元素与前一个元素不同时递增arr1,例如:

if (arr1[i] == arr2[j]) {
    if (i == 0 || arr1[i - 1] != arr1[i]) {
        System.out.print(arr1[i] + " ");
        j++;
    }
    i++;
}