繁体   English   中英

使用 2 int arrays 创建二维数组

[英]Create 2D array with 2 int arrays

我想用 2 个输入数组的总和构建一个 2D 矩阵(通过添加行和列元素)。

例如,如果 a 是{1,3,5}而 b 是{4,8} ,我想这样构建我的矩阵: [{1,3,5}, {4,7,9}, {8,11,13}]

这里有更多解释:[{1,3,5}(这是a),{4,7,9}(4来自b,7 = 3 + 4)(9 = 5 + 4),{8,11, 13}]。 (再次从 b 得到 8,然后 11=3+8)(13=5+8)。 如果用 a 绘制第一行,然后将 b 绘制为与 a[0] 对齐的列,则可以将行元素与列元素相加得到求和矩阵。

有没有更有效的方法来做到这一点? 我尝试编写 2 个 for 循环,这会产生很大的时间和空间复杂性。

 public void BuildMatrix (int[] a, int[] b) {
            int rows = b.length+1;
            int columns = a.length;
            int[][] matrix = new int[b.length+1][a.length];
            for (int i = 0; i < columns-1; i++) {
                matrix[0][i] = a[i];
                for (int j = 1; j < rows; j++) {
                    matrix[j][0] = b[j-1];
                    matrix[j][i+1] = b[j-1] + a[i+1];
                }
            } }

输入 arrays 是否有任何可能的大小? 如果您提前知道大小,则可以对其进行优化。

您正在计算rowscolumns两次:

        int rows = b.length+1;
        int columns = a.length;
        int[][] matrix = new int[b.length+1][a.length];

那为什么不呢:

        int rows = b.length+1;
        int columns = a.length;
        int[][] matrix = new int[rows][columns];

同样,您可以在此处排除b[j-1] (但编译器可能还是会这样做):

                matrix[j][0] = b[j-1];
                matrix[j][i+1] = b[j-1] + a[i+1];

不过,这些都是非常小的部分。

如果调用很多,您应该查看更广泛的图片并尝试并行化BuildMatrix调用。 然后,您将为多个BuildMatrix调用准备一组输入,并在多个处理器内核上(并行)运行它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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