我有一个非常简单的问题,我正试图解决,但似乎无法围绕我的头怎么做。如果我有一个由 [1,3,2,7] 运行之后,该方法将返回 [1,1,3,3,2,2,7,7] 最好的办法是什么?我还有一个size变量,可以增加数组的大小以腾出空间,例如,在执行 size*2 我会得到 [1,3,2,7,0,0,0,0] 任何指导都将不胜感激:)
[1,3,2,7]
[1,1,3,3,2,2,7,7]
size*2
[1,3,2,7,0,0,0,0]
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 创建用零填充的输入数组的副本。按相反方向填充结果数组(从最后一个到第一个):
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 操作但是,许多中间对象(数组或流)是用这种方法创建的。
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(); }
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 和你描述的一模一样。
input.length * 2
for (int = 0; i < ...)
out[0]
out[1]
out[2]
out[3]
out[4]
out[5]
java.util.Arrays.copyOf
9bfwbjaz3#
如果我必须解决这个问题,我将使用以下方法:创建新的长度数组 Size * 2 ,现在,从 for (int i = len; i > 0;...) ,对于每个 i 我会做以下事情
Size * 2
for (int i = len; i > 0;...)
i
nums1[(i * 2) - 1] = nums[i - 1]; nums1[(i * 2) - 2] = nums[i - 1];
3条答案
按热度按时间vqlkdk9b1#
有多种方法可以做到这一点:
创建一个双倍大小的结果数组,并通过复制输入中的元素来填充它:
使用
Arrays.copyOf
创建用零填充的输入数组的副本。按相反方向填充结果数组(从最后一个到第一个):
主要使用流api
flatMap
操作但是,许多中间对象(数组或流)是用这种方法创建的。
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
和你描述的一模一样。9bfwbjaz3#
如果我必须解决这个问题,我将使用以下方法:
创建新的长度数组
Size * 2
,现在,从
for (int i = len; i > 0;...)
,对于每个i
我会做以下事情