我需要将给定大小的数字(由用户在运行时提供)安排到3维数组以在真实3D空间中表示这些数字。
例如,如果用户输入7,那么我需要创建一个大小为2,2,2的数组,并将用户给出的前7个数字排列到从0,0,0位开始的数组中。
立方体应始终尽可能小,例如,大小为2的立方体可包含2 * 2 * 2 = 8个值。并且需要一个可以接受输入数字并返回3D整数数组的函数,其值从输入数组插入(输入[0]将变为结果[0] [0] [0]等等。)
int input[7] ;
int[][][] result = bestFunction(int[] input) {...}
我通过一次检查每个值来实现3个嵌套for循环。 是否有更好或更快的方法来实现它?
答案 0 :(得分:0)
执行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);
。
答案 1 :(得分:0)
只要在输入的最后一个元素放入后立即中断,三个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;
}