[英]What is the quickest way to arrange numbers to 3 dimensional array?
我需要将给定大小(由用户在运行时提供)的数字排列到3维数组中,以在真实的3D空间中表示这些数字。
例如,如果用户输入7,那么我需要创建一个大小为2,2,2的数组,并将用户给定的前7个数字从位置0,0,0开始排列到该数组中。
多维数据集应始终尽可能最小,例如大小为2的多维数据集可以包含2 * 2 * 2 = 8个值。 并且需要一个函数,该函数可以接受输入数字并返回从输入数组插入值的3D整数数组(input [0]将成为result [0] [0] [0],依此类推)。
int input[7] ;
int[][][] result = bestFunction(int[] input) {...}
我通过一次检查每个值实现了3个嵌套的for循环。 是否有更好或更快速的方法来实施?
执行Math.floor(Math.cbrt(val))
以获取尺寸大小。
我认为我们可以将其减少到1级嵌套,或者使用两个循环,对z轴值使用字符串输入。
for(int i = 0; i<size; i++)
for(int j = 0;j<size;j++)
arr[i][j]= Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
其中Scanner sc = new Scanner(System.in);
如果您要接受用户输入。
只要在输入的最后一个元素放入后立即中断,三个for循环就是O(n)。
int[][][] func(int[] input) {
int size = (int) Math.ceil(Math.cbrt(input.length));
int[][][] result = new int[size][size][size];
int x = 0;
loop: for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
for (int k = 0; k < size; k++) {
result[i][j][k] = input[x++];
if (x == input.length)
break loop; //Finish processing
}
}
}
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.