【问题标题】:Corejava to print unique elements from two arryas [closed]核心 Java 打印两个数组中的唯一元素 [关闭]
【发布时间】:2012-11-08 23:57:37
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您的号码是否限制在一定范围内? (即 1-25)
  • 尝试从第一个数组旋转第一个数组中的每个元素,检查每个元素与第二个数组元素。但我也想要反过来(比如从第二个数组打印)
  • 是的 durron,它是固定的,但需要使用最少的循环。谢谢
  • 为此使用集合有什么问题,无论如何?您只需使用 Map 来跟踪项目及其计数,然后吐出匹配值为 1 的键。尽管可能有比这更好的集合,甚至...

标签: java arrays loops


【解决方案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;
    }
}

【讨论】:

    【解决方案2】:

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

    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;
    }
    

    【讨论】:

    • 你能解释一下这里发生了什么吗? for(int i = 0; i
    • 我想我明白了,对于它维护的每个元素索引计数器。谢谢,这是一个不错的程序
    • 是的,很高兴我能帮上忙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2010-10-01
    • 2020-10-17
    • 2019-05-10
    • 1970-01-01
    • 2017-08-22
    相关资源
    最近更新 更多