山の問題-(2 D配列上、下、左、右比較)


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));
👉 上のコードを説明します

  • 上、下、左、右を比較するために、インデックスに追加する値を並べておきます.

  • これは峰の価値を証明している.

  • 現在のインデックスに値を追加すると、上、下、左、右の値を取得および比較できます.

  • インデックスが0より小さい場合、エラーが発生します.これは、エラーが発生する前に処理された結果です.インデックスが0より小さい場合は、最小値として処理されるため、これらの値は無視できます.

  • 処理後のflag値は変わらず,そのままであれば奉宥利という意味なので,答えに1を加える.
  • 👉 これによりピークの個数を求めることができる.
    最初はif文ですべての場合の数を比較しようとしたが,配列[1]をエラー処理しなかった.
    しかし、再びfor文を用いて上、下、左、右を比較すると、for文を変換する前にエラー処理を行い、エラーに接触しないようにすることができます.
    ソース-JavaScriptアルゴリズムの解題