グリッド最大和-(2 D配列の行、列、および2つの対角線を解く)


2 Dアレイの行と列の和と2本の対角線の和を求めます



👉  行数と列数が等しいn*m配列が与えられた場合、各行の和、各列の和、2対角線の和の最大値を求める問題.
問題に示すように、各行の和、各列の和、2本の対角線の最大値を求めればよい.
じゃ、それを解いてください.

コード#コード#

function solution(arr) {
    let answer = Number.MIN_SAFE_INTEGER;
    let n = arr.length;
    let sum1 = sum2 = 0;

    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            sum1 += arr[i][j];   ... 1
            sum2 += arr[j][i];   ... 2
        }
        answer = Math.max(answer, sum1, sum2);   ... 3
				sum1 = sum2 = 0;
    }

    sum1 = sum2 = 0;   ... 4

    for (let i = 0; i < n; i++) {
        sum1 += arr[i][i];   ... 5
        sum2 += arr[i][n - i - 1];   ... 6 
    }

    answer = Math.max(answer, sum1, sum2);

    return answer;
}

let arr = [
    [10, 13, 10, 12, 15],
    [12, 39, 30, 23, 11],
    [11, 25, 50, 53, 15],
    [19, 27, 29, 37, 27],
    [19, 13, 30, 13, 19],
];
console.log(solution(arr));
👉  上のコードを見てみましょう.

  • i=0,jは0から4に移動し,sum 1に最初の行の値を加算する.

  • 1に示すようにsum 2の最初の列の値を加算します.

  • 答えとsum 1にsum 2を加えるMath.max関数を使用して、答えに最値を入れます.
    配列の長さに繰り返して、すべての行、列の最大値を求めることができます.

  • 値の比較が完了したら、sum 1とsum 2を0に初期化します.

  • 左上から右下の対角線は、行と列のインデックスが同じなので、iを付けるといいです.

  • 右上から左下の対角線、行はi列で、配列の最後のインデックスからiを減算すると値が得られます.
  • 対角線和を求めるとき、インデックス値で求まるとは思わなかった.これからはそれをよく利用しなければなりません.
    ソース-JavaScriptアルゴリズムの解題