java—如何向与上一个值匹配的数组中添加值

hmae6n7t  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(294)

我有一个非常简单的问题,我正试图解决,但似乎无法围绕我的头怎么做。如果我有一个由 [1,3,2,7] 运行之后,该方法将返回 [1,1,3,3,2,2,7,7] 最好的办法是什么?我还有一个size变量,可以增加数组的大小以腾出空间,例如,在执行 size*2 我会得到 [1,3,2,7,0,0,0,0] 任何指导都将不胜感激:)

vqlkdk9b

vqlkdk9b1#

有多种方法可以做到这一点:
创建一个双倍大小的结果数组,并通过复制输入中的元素来填充它:

public static int[] duplicateArray(int ... arr) {
    int[] res = new int[2 * arr.length];
    int i = 0;
    for (int x : arr) {
        res[i++] = res[i++] = x;
    }
    return res;
}

使用 Arrays.copyOf 创建用零填充的输入数组的副本。
按相反方向填充结果数组(从最后一个到第一个):

public static int[] duplicateArrayCopy(int ... arr) {
    int[] res = Arrays.copyOf(arr, 2 * arr.length); // res is padded with 0s
    for (int i = res.length - 1, j = arr.length - 1; j >= 0; j--) {
        res[i--] = res[i--] = res[j];
    }
    return res;
}

主要使用流api flatMap 操作
但是,许多中间对象(数组或流)是用这种方法创建的。

public static int[] duplicateArrayStream(int ... arr) {
    return Arrays.stream(arr) // IntStream
                 .flatMap(x -> Arrays.stream(new int[]{x, x}))
                 .toArray();

}
// or
public static int[] duplicateArrayStream2(int ... arr) {
    return Arrays.stream(arr)
                 .flatMap(x -> Stream.of(x, x).mapToInt(i -> i))
                 .toArray();
}
csga3l58

csga3l582#

java中的数组不能增长或收缩。因此,考虑到“输出”与“输入”的大小不同,只有一种方法:创建一个新数组。
对于#1:
创建一个新数组 input.length * 2 在尺寸上。
使用 for (int = 0; i < ...) 样式循环,因为您需要索引。
了解如何将0“Map”到 out[0] 以及 out[1] ,1到 out[2] 以及 out[3] ,2到 out[4] 以及 out[5] ,等等。这是一个微不足道的数学练习。
第二,更简单。或者,只是使用 java.util.Arrays.copyOf 和你描述的一模一样。

9bfwbjaz

9bfwbjaz3#

如果我必须解决这个问题,我将使用以下方法:
创建新的长度数组 Size * 2 ,
现在,从 for (int i = len; i > 0;...) ,对于每个 i 我会做以下事情

nums1[(i * 2) - 1] = nums[i - 1];
nums1[(i * 2) - 2] = nums[i - 1];

相关问题