Задача: 562. Longest Line of Consecutive One in Matrix
Дана бинарная матрица размера m x n. Вернуть длину самой длинной последовательной линии из единиц в матрице.
Линия может быть горизонтальной, вертикальной, диагональной или анти-диагональной.
Пример:
Input: mat = [[0,1,1,0],[0,1,1,0],[0,0,0,1]]
Output: 3
👨💻 Алгоритм:
1⃣Создайте 3 матрицы для хранения текущей длины последовательных единиц: horizontal, vertical, diagonal и anti_diagonal.
2⃣Итерируйте через каждый элемент матрицы: Если элемент равен 1, обновите соответствующие значения в матрицах horizontal, vertical, diagonal и anti_diagonal. Обновите максимальную длину последовательной линии.
3⃣Верните максимальную длину.
😎 Решение:
class Solution {
longestLine(mat) {
if (!mat || !mat.length || !mat[0].length) {
return 0;
}
const m = mat.length;
const n = mat[0].length;
let maxLength = 0;
const horizontal = Array.from({ length: m }, () => Array(n).fill(0));
const vertical = Array.from({ length: m }, () => Array(n).fill(0));
const diagonal = Array.from({ length: m }, () => Array(n).fill(0));
const antiDiagonal = Array.from({ length: m }, () => Array(n).fill(0));
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (mat[i][j] === 1) {
horizontal[i][j] = (j > 0 ? horizontal[i][j-1] : 0) + 1;
vertical[i][j] = (i > 0 ? vertical[i-1][j] : 0) + 1;
diagonal[i][j] = (i > 0 && j > 0 ? diagonal[i-1][j-1] : 0) + 1;
antiDiagonal[i][j] = (i > 0 && j < n - 1 ? antiDiagonal[i-1][j+1] : 0) + 1;
maxLength = Math.max(maxLength, horizontal[i][j], vertical[i][j], diagonal[i][j], antiDiagonal[i][j]);
}
}
}
return maxLength;
}
}Ставь 👍 и забирай 📚 Базу знаний
