【问题标题】:how to merge arrays and keep the repeaters如何合并数组并保留中继器
【发布时间】:2013-11-26 00:24:40
【问题描述】:

所以我想合并数组并保留任何重复的数字,并且还想保持它们从低到高的顺序。我是新手,所以我不太了解,感谢您的帮助。

这是一个例子

数组 1 = 1,2,2,3,8,9

数组 2 =3,4,8,9

合并结果 = 1,2,2,3,3,4,8,8,9,9

另一个例子

数组 1 = 1,1,2,7,9

数组 2 = 2,9,10,15

合并结果 = 1,1,2,2,7,9,9,10,15

如果你还需要什么,尽管问我,我会尽力去做。

【问题讨论】:

    标签: java arrays merge


    【解决方案1】:

    解决问题的最简单方法是将问题分解为更小的部分:

    1. 将两个数组合并为一个(新)数组
    2. 将新数组按升序排序(即从最低到最高)

    鉴于arr1arr2 是一些int[] 变量,它们的数字可能重复也可能不重复,您可以通过创建一个长度为arr1.length + arr2.length 的新int[] 数组来组合这两个数组,然后复制值超过。 Java 数组的新手将受益于使用 for 循环手动迭代,但是一旦您熟悉了数组,System.arraycopy 方法也很好:

    int[] combo = new int[arr1.length + arr2.length];
    for (int i = 0; i < arr1.length; i++)
    {
        combo[i] = arr1[i];
    }
    // or replace the loop with System.arraycopy(arr1, 0, combo, 0, arr1.length);
    for (int i = 0; i < arr2.length; i++)
    {
        combo[arr1.length + i] = arr2[i]; // the index is offset by arr1.length to avoid overwriting the previous values from arr1
    }
    // or System.arraycopy(arr2, 0, combo, arr1.length, arr2.length);
    

    要将新数组按升序排序,内置的Arrays.sort 将起作用:

    import java.util.Arrays;
    ...
    Arrays.sort(combo);
    

    有关System.arraycopy 工作原理的文档可以在http://docs.oracle.com/javase/7/docs/api/java/lang/System.html 找到。

    【讨论】:

      【解决方案2】:

      最简单的方法是:

      int[] combined = new int[array1.length + array2.length];
      System.arrayCopy(array1, 0, combined, 0, array1.length);
      System.arrayCopy(array2, 0, combined, array1.length, array2.length);
      Arrays.sort(combined);
      

      您创建一个更大的数组,其中未排序的成员,然后对它们进行排序... ;-)

      【讨论】:

        猜你喜欢
        • 2013-07-01
        • 2018-01-08
        • 2014-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 1970-01-01
        相关资源
        最近更新 更多