比较两个数组的公共项目,并返回另一个数组与公共项目

时间:2017-11-16 11:40:14

标签: java arrays elements items

所以问题是我有两个数组,必须检查它们的常见项目。通常的东西,非常容易。但对我来说棘手的是我必须返回另一个数组,其中包含已发现常见的元素我不能不使用任何Collections.Thanks提前。这是我的代码到目前为止!

public class checkArrayItems {
    static int[] array1 = { 4, 5, 6, 7, 8 };
    static int[] array2 = { 1, 2, 3, 4, 5 };

    public static void main(String[] args) {
        checkArrayItems obj = new checkArrayItems();
        System.out.println(obj.checkArr(array1, array2));

    }

    int[] checkArr(int[] arr1, int[] arr2) {
        int[] arr = new int[array1.length];
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2.length; j++) {
                if (arr1[i] == arr2[j]) {
                    arr[i] = arr1[i];
                }

            }
        }
        return arr;

    }

}

4 个答案:

答案 0 :(得分:3)

如果有人想知道@ user3438137提到的“追逐”算法是怎么样的:

int[] sorted1 = Arrays.copyOf(array1, array1.length);
Arrays.sort(sorted1);
int[] sorted2 = Arrays.copyOf(array2, array2.length);
Arrays.sort(sorted2);
int[] common = new int[Math.min(sorted1.length, sorted2.length)];
int numCommonElements = 0, firstIndex = 0; secondIndex = 0;
while (firstIndex < sorted1.length && secondIndex < sorted2.length) {
    if (sorted1[firstIndex] < sorted2[secondIndex]) firstIndex++;
    else if (sorted1[firstIndex] == sorted2[secondIndex]) {
        common[numCommonElements] = sorted1[firstIndex];
        numCommonElements++;
        firstIndex++;
        secondIndex++;
    }
    else secondIndex++;
}
// optionally trim the commonElements array to numCommonElements size

答案 1 :(得分:0)

我懒得输入代码,但这是算法。 1.排序两个数组 2.迭代数组比较项目并增加索引。

希望这有帮助。

答案 2 :(得分:0)

在两个for循环之前声明一个索引

int index = 0;

将保存arr数组的当前位置。然后:

arr[index++] = arr1[i];

而且,由于你使用arr1.lenght初始化arr,你的数组将在非colision的末尾填充0。

答案 3 :(得分:0)

您可以使用arr为新数组arr[i] = Integer.MIN_VALUE;中的元素使用MIN或MAX默认虚拟值。通过这种方式,您将能够区分真实值和虚拟值。如下所示:

int[] checkArr(int[] arr1, int[] arr2) {
        int[] arr = new int[array1.length];
        for (int i = 0; i < arr1.length; i++) {
            arr[i] = Integer.MIN_VALUE;
            for (int j = 0; j < arr2.length; j++) {
                if (arr1[i] == arr2[j]) {
                    arr[i] = arr1[i];
                }

            }
        }
        return arr;

    }

<强> 输出

[4,5,-2147483648,-2147483648,-2147483648]

<强> 修改

<强> 结论 当您对arr进行迭代时,-2147483648以外的所有值都是常见的。

编辑2

要打印下面评论中提到的常用值:

public static void main(String[] args) {
checkArrayItems obj = new checkArrayItems();
int[] arr = obj.checkArr(array1, array2);
        System.out.println("Common values are : ");
        for (int x : arr) {
            if (x != Integer.MIN_VALUE) {
                System.out.print(x+"\t");
            }
        }
}

建议:遵循课程的命名惯例,即将checkArrayItems设为CheckArrayItems