繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM