3

異なる長さの行を持つ2次元配列があります。列の最大要素で構成される新しい配列を返すメソッドを作成したいと思います。これが単純なnxm配列の場合は簡単ですが、行は可変長であるため、列の要素数の違いを説明するための解決策を思い付くことができません。

たとえば、配列は次のようになります。

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];
            } 
         } 
      } 

どんな助けでもいただければ幸いです

編集:最初に行うことは、新しい配列のサイズを定義するため、要素の数が最大の行を見つけることであることに気付きました。そこから..おそらく行の要素を取得し、それらを新しい配列の同じ位置にある要素と比較する必要があります。そして、すべての行でこれを行います。次に、他の行がどれだけ短いかは関係ありません。私は正しい道を進んでいますか?

4

1 に答える 1

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];
于 2012-12-02T01:19:03.250 に答える