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

Java 将数字排列到三维数组的最快方法是什么?,java,Java,我需要将给定大小的数字(由用户在运行时提供)排列到三维数组中,以在真实的三维空间中表示这些数字 例如,如果用户输入7,那么我需要创建一个大小为2,2,2的数组,并将用户给出的前7个数字从位置0,0,0排列到数组中 多维数据集应始终尽可能最小,例如大小为2的多维数据集可以包含2*2*2=8个值。并且需要一个函数,该函数可以获取输入数字并返回3D整数数组,其中包含从输入数组插入的值(输入[0]将成为结果[0][0][0],依此类推) 通过一次检查每个值,我实现了3个嵌套for循环。 是否有更好或更快

我需要将给定大小的数字(由用户在运行时提供)排列到三维数组中,以在真实的三维空间中表示这些数字

例如,如果用户输入7,那么我需要创建一个大小为2,2,2的数组,并将用户给出的前7个数字从位置0,0,0排列到数组中

多维数据集应始终尽可能最小,例如大小为2的多维数据集可以包含2*2*2=8个值。并且需要一个函数,该函数可以获取输入数字并返回3D整数数组,其中包含从输入数组插入的值(输入[0]将成为结果[0][0][0],依此类推)

通过一次检查每个值,我实现了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();
for(int i=0;i执行
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();
for(int i=0;i3个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;
}
int[]func(int[]input){
int size=(int)Math.ceil(Math.cbrt(input.length));
int[][]结果=新的int[size][size][size];
int x=0;
循环:for(int i=0;i
只要在输入的最后一个元素插入后立即断开,三个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;
}
int[]func(int[]input){
int size=(int)Math.ceil(Math.cbrt(input.length));
int[][]结果=新的int[size][size][size];
int x=0;
循环:for(int i=0;i
我可以得到大小,但3个嵌套循环看起来不好。例如,在达到0,0,1后,我需要在0,1,0等旁边进行测试。我将测试上述内容并很快确认。我可以得到大小,但3个嵌套循环看起来不好。例如,在达到0,0,1后,我需要在0,1,0等旁边进行测试。我将测试上述内容并很快确认。exac是什么创建数组的“规则”是什么?即你说的
input[0]
转到
result[0][0][0]
,那么
input[1]
input[2]怎么样
等等?它应该是顺序的,例如,如果用户输入1,4,3,5,2,3,0,结果应该是0,0,0=1,0,1=4,1,1,0=0 1,1,1=无值3嵌套循环应该是最快的。只需跟踪输入数组的迭代,以便在将输入的最后一个数字放入结果数组后,使用
break;
。如果输入如果有n个元素,它将是一个O(n),而int数组不能有“无值”-所有元素都初始化为0,因此如果您不触摸它们,它们将保持0。创建数组的“规则”到底是什么?例如,您说
input[0]
转到
result[0][0][code>,那么
input[1]
input[2]如何
等等?它应该是顺序的,例如,如果用户输入1,4,3,5,2,3,0,结果应该是0,0,0=1,0,1=4,1,1,0=0 1,1,1=无值3嵌套循环应该是最快的。只需跟踪输入数组的迭代,以便在将输入的最后一个数字放入结果数组后,使用
break;
。如果输入有n个元素,它将是一个O(n),而int数组不能有“无值”-所有元素都初始化为0,因此如果不接触它们,它们将保持为0