簡體   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