у меня возникла проблема при выполнении этой задачи. https://www.hackerrank.com/challenges/30-2d-arrays/problem. Это потому, что при попытке закончить этот алгоритм я получил странный результат.
function main(arr) {
let max;
let sum;
for(let a=0; a<arr.length-2; a++){
for(let b=0; b<arr.length-2; b++){
sum =
arr[a][b] + arr[a][b+1] + arr[a][b+2] +
arr[a+1][b+1] +
arr[a+2][b] + arr[a+2][b+1] + arr[a+2][b+2];
console.info(sum);
if (!max || sum > max){
max = sum;
}
}
}
console.info(max)
}
main([
[-1, 1, -1, 0, 0, 0],
[ 0, -1, 0, 0, 0, 0],
[-1, -1, -1, 0, 0, 0],
[ 0, -9, 2, -4, -4, 0],
[-7, 0, 0, -2, 0, 0],
[ 0, 0, -1, -2, -4, 0],
]);
я получил результат -2 вместо 0. это означает отрицательное число здесь> 0. почему это происходит?
Это происходит из-за части !max в вашем коде. Как вы можете видеть, когда max === 0
в этом случае часть if становится,
if (!0 && -9 > 0) {
}
Хотя -9>0
ложно, но поскольку !0 ===
верно, блок if становится,
if (!false || false) => if (true || false) => if (true)
Вот почему мы обновляем максимальное значение.
Теперь, чтобы решить вашу проблему, вы можете установить max = -Infinity
в самой первой строке вашего кода и удалить часть !max
из блока if. Таким образом, ваш метод будет,
function main(arr) {
let max = -Infinity;
let sum;
for(let a=0; a<arr.length-2; a++){
for(let b=0; b<arr.length-2; b++){
sum =
arr[a][b] + arr[a][b+1] + arr[a][b+2] +
arr[a+1][b+1] +
arr[a+2][b] + arr[a+2][b+1] + arr[a+2][b+2];
console.info(sum);
if ( sum > max){
max = sum;
}
}
}
console.info(max)
}
main([
[-1, 1, -1, 0, 0, 0],
[ 0, -1, 0, 0, 0, 0],
[-1, -1, -1, 0, 0, 0],
[ 0, -9, 2, -4, -4, 0],
[-7, 0, 0, -2, 0, 0],
[ 0, 0, -1, -2, -4, 0],
]);