扩展数组以表示索引的次数是原始值的量级的次数



示例: expand(new int[]{3, 2, 5}) -> {0, 0, 0, 1, 1, 2, 2, 2, 2, 2}
我正在尝试让它创建一个新数组来打印 3, 3 次的索引。所以 3 将是 0,0,0。

public static int[] expand(int[] input) {
int c = 0;
int[] myArray = new int[sum(input)];
if(input.length == 0){
return new int[0];
}
for(int i = 0; i < input.length; i++) {
int a = input[i];
for(int j = c; j < a; j++) {
c += j;
myArray[j] = i;
}
}
return myArray;
}

目前这只能部分工作,我似乎无法弄清楚如何正确浏览整个数组。此外,索引零似乎被跳过了。

你很接近! 似乎您只需要稍微修改嵌套的 for 循环:

for (int j = 0; j < a; j++) {
myArray[c++] = i;
}

当您使用c跟踪当前索引时,这只是将索引c处的元素设置为i并递增c。 您还可以删除a并使用input[i]代替它。

注意:从0开始j比从c更容易。

函数方法

public class Main {
public static void main(final String... args) {
int[] items = expand(new int[]{3, 2, 5});
System.out.println(Arrays.toString(items));
}
public static int[] expand(int[] input) {
return IntStream.range(0, input.length)
.flatMap(p -> IntStream.generate(() -> p).limit(input[p]))
.toArray();
}
}

这将产生索引流,并且对于每个项目,获取许多索引,将它们全部放入数组中

最新更新