題目
2D Array - DS
舉例輸入
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
舉例輸出
19
解析
這題會給一個arr.lenght=6,arr[i].length=6的二維陣列
(但我還是習慣把程式寫活一點)
計算此二維陣列展開後把"工"放進去的最大和
那麼我們只要知道此列會被檢查幾次,因此"工"要右移幾次
並且計算出有幾行,需要迴圈幾次,取得最大的數
function hourglassSum(arr) {
//至少最下面要留兩排,陣列從0開始數
let checkRow = (arr.length - 2 - 1);
let checkCol = (arr[0].length - 2 - 1)
//檢查開始
// let max = 0;//如果答案為負就會出問題
let max = []
for (let row = 0; row <= checkRow; row++) {
for (let col = 0; col <= checkCol; col++) {
let sum = 0;
sum = arr[row][col] + arr[row][col + 1] + arr[row][col + 2];
sum += arr[row + 1][col + 1];
sum += arr[row + 2][col] + arr[row + 2][col + 1] + arr[row + 2][col + 2];
//這個寫法如果答案為0會出問題
// max = (max || sum) > sum ? max : sum;
max.push(sum);
}
}
return max.length > 0 ? Math.max(...max) : 0;
}