我有一个二维数组,其中包含不同长度的行。我想编写一个返回一个新数组的方法,该数组由列的最大元素组成。如果这是一个简单的n x m数组,那将很容易,但由于行是可变长度的,我无法想出一个解决方案来解释列中不同数量的元素。
例如,数组如下所示:
int[][] test = { { 0, 1, 4, 5, 6, 8 },
{ 4, 5, 8, 3, 9 },
{ 3, 6, 2 }
};
预期结果将是:
int[] result = {4, 6, 8, 5, 9, 8};
我有代码可以找到行的最大元素,但我不知道如何为列调整它。
int[] result = new int[m.length];
for (int x = 0; x < m.length; x++) {
result[x] = 0;
for (int y = 0; y < m[x].length; y++) {
if (result[x] < m[x][y]) {
result[x] = m[x][y];
}
}
}
任何帮助将不胜感激
编辑:我现在意识到要做的第一件事就是找到具有最大元素数量的行,因为它定义了新数组的大小。从那里..应该采取行的元素,并将它们与新数组中相同位置的元素进行比较。并且每行都这样做。那么其他行的短小并不重要。我是在正确的方式吗?答案 0 :(得分:2)
首先,您要查找最大行的长度。
然后,与您的算法类似,但您要确保不会超出范围异常。就是这样:
int maxcol = 0;
for(int i = 0; i < test.length; i++)
if(test[i].length > maxcol)
maxcol = test[i].length;
int[] result = new int[maxcol];
for (int j = 0; j < maxcol; j++)
for (int i = 0; i < test.length; i++)
if (test[i].length > j && result[j] < test[i][j])
result[j] = test[i][j];