山の問題-(2 D配列上、下、左、右比較)
9931 ワード
2 D配列の上、下、左、右の値の比較
👉 上の問題は、現在位置の数字を上、下、左、右の数字と比較し、現在位置の数字が最大であればピークになります.
与えられた配列が0に囲まれていることも参考にする.
コードに移動します.
コード#コード#
function solution(arr) {
let answer = 0;
let dx = [0, 1, 0, -1]; ... 1
let dy = [1, 0, -1, 0];
let n = arr.length;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
let flag = 1; ... 2
for (let k = 0; k < 4; k++) {
let nx = i + dx[k]; ... 3
let ny = j + dy[k];
if ( ... 4
nx >= 0 &&
nx < n &&
ny >= 0 &&
ny < n &&
arr[nx][ny] >= arr[i][j]
) {
flag = 0;
break;
}
}
if (flag) answer++; ... 5
}
}
return answer;
}
let arr = [
[5, 3, 7, 2, 3],
[3, 7, 1, 6, 1],
[7, 2, 5, 3, 4],
[4, 3, 6, 4, 1],
[8, 7, 3, 5, 2],
];
console.log(solution(arr));
👉 上のコードを説明します
function solution(arr) {
let answer = 0;
let dx = [0, 1, 0, -1]; ... 1
let dy = [1, 0, -1, 0];
let n = arr.length;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
let flag = 1; ... 2
for (let k = 0; k < 4; k++) {
let nx = i + dx[k]; ... 3
let ny = j + dy[k];
if ( ... 4
nx >= 0 &&
nx < n &&
ny >= 0 &&
ny < n &&
arr[nx][ny] >= arr[i][j]
) {
flag = 0;
break;
}
}
if (flag) answer++; ... 5
}
}
return answer;
}
let arr = [
[5, 3, 7, 2, 3],
[3, 7, 1, 6, 1],
[7, 2, 5, 3, 4],
[4, 3, 6, 4, 1],
[8, 7, 3, 5, 2],
];
console.log(solution(arr));
上、下、左、右を比較するために、インデックスに追加する値を並べておきます.
これは峰の価値を証明している.
現在のインデックスに値を追加すると、上、下、左、右の値を取得および比較できます.
インデックスが0より小さい場合、エラーが発生します.これは、エラーが発生する前に処理された結果です.インデックスが0より小さい場合は、最小値として処理されるため、これらの値は無視できます.
処理後のflag値は変わらず,そのままであれば奉宥利という意味なので,答えに1を加える.
最初はif文ですべての場合の数を比較しようとしたが,配列[1]をエラー処理しなかった.
しかし、再びfor文を用いて上、下、左、右を比較すると、for文を変換する前にエラー処理を行い、エラーに接触しないようにすることができます.
ソース-JavaScriptアルゴリズムの解題
Reference
この問題について(山の問題-(2 D配列上、下、左、右比較)), 我々は、より多くの情報をここで見つけました https://velog.io/@rkrkdldkd/봉우리-문제2차원-배열-상하좌우-값-비교テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol