将数字排列到三维数组的最快方法是什么?

时间:2017-12-01 20:22:51

标签: java

我需要将给定大小的数字(由用户在运行时提供)安排到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循环。 是否有更好或更快的方法来实现它?

2 个答案:

答案 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;
}