2

我想要一个核心 java 程序来查找两个数组之间的唯一元素。示例:Array1 - 9, 5,3,23,2,5 Array2 - 19, 5,3,23,24,53

来自两个数组的唯一元素的输出应打印为:9、2、19、24、53

请帮助我编写具有准确循环的程序。

注意:不想使用任何集合来处理相同的程序,并且只想使用循环来完成。谢谢

4

2 回答 2

1

您必须使用至少 2 个循环。

public void uniqueM(int arrayA[], int arrayB[]){
    boolean uniqueA = true, uniqueB = true;
    int high_size = arrayA.length, low_size = arrayB.length;

   if(arrayA.length < arrayB.length){
     low_size = arrayA.length;
     high_size = arrayB.length;
    }

    for(int i = 0; i < high_size; i++){
      for(int j = 0; j < low_size;j++)
      {
         if(i < arrayA.length && arrayA[i] == arrayB[j]) uniqueA = false;
         if(i < arrayB.length && arrayB[i] == arrayA[j]) uniqueB = false;
      }
       if(uniqueA && i < arrayA.length) System.out.println(arrayA[i]);
       if(uniqueB && i < arrayB.length) System.out.println(arrayB[i]);

       uniqueA = true;
       uniqueB = true;
    }
}
于 2012-11-09T00:18:33.983 回答
1

您需要根据合法整数的范围调整counter数组和offset变量的大小。但这不使用java.utilAPI 中的任何内容,只使用循环。

public static int[] uniques(int[] array1, int[] array2) {
    // assuming your integers are 0-53, you'd have to modify this if it's different
    int[] counter = new int[54];

    // offset needs to be changed based on if negative numbers are allowed
    int offset = 0;

    for(int i = 0; i < array1.length; i++) {
        counter[array1[i] + offset]++;
    }
    for(int i = 0; i < array2.length; i++) {
        counter[array2[i] + offset]++;
    }

    int numUniques = 0;
    for(int i = 0; i < counter.length; i++) {
        if(counter[i] == 1) numUniques++;
    }

    int[] uniqueArray = new int[numUniques];
    int index = 0;
    for(int i = 0; i < counter.length; i++) {
        if(counter[i] == 1) uniqueArray[index++] = i;
    }

    return uniqueArray;
}
于 2012-11-09T00:35:01.490 回答