グリッド最大和-(2 D配列の行、列、および2つの対角線を解く)
9007 ワード
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));
👉 上のコードを見てみましょう.
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アルゴリズムの解題
Reference
この問題について(グリッド最大和-(2 D配列の行、列、および2つの対角線を解く)), 我々は、より多くの情報をここで見つけました https://velog.io/@rkrkdldkd/격자판-최대합2차원-배열-행-열-두-대각선-값-구하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol