Supposons que nous ayons une matrice binaire (un tableau contenant uniquement des tableaux de 0 ou 1) comme indiqué ci-dessous -
const arr = [ [0,1,1,0], [0,1,1,0], [0,0,0,1] ];
Nous devons écrire une fonction JavaScript qui accepte une matrice comme celle-ci comme premier et unique paramètre.
La tâche de notre fonction est de trouver la plus longue ligne de matrices consécutives dans une matrice et de renvoyer le nombre de 1 qu'elle contient. La ligne peut être horizontale, verticale, diagonale ou anti-diagonale.
Par exemple, pour le tableau ci-dessus, la sortie devrait être -
const output = 3
car la ligne la plus longue commence à arr[0][1] et s'étend en diagonale jusqu'à -
arr[2][3]
Le code est -
Live Demo
const arr = [ [0,1,1,0], [0,1,1,0], [0,0,0,1] ]; const longestLine = (arr = []) => { if(!arr.length){ return 0; } let rows = arr.length, cols = arr[0].length; let res = 0; const dp = Array(rows).fill([]); dp.forEach((el, ind) => { dp[ind] = Array(cols).fill([]); dp[ind].forEach((undefined, subInd) => { dp[ind][subInd] = Array(4).fill(null); }); }); for (let i = 0; i < rows; i++) { for (let j = 0; j < cols; j++) { if (arr[i][j] == 1) { dp[i][j][0] = j > 0 ? dp[i][j - 1][0] + 1 : 1; dp[i][j][1] = i > 0 ? dp[i - 1][j][1] + 1 : 1; dp[i][j][2] = (i > 0 && j > 0) ? dp[i - 1][j - 1][2] + 1 : 1; dp[i][j][3] = (i > 0 && j < cols - 1) ? dp[i - 1][j + 1][3] + 1 : 1; res = Math.max(res, Math.max(dp[i][j][0], dp[i][j][1])); res = Math.max(res, Math.max(dp[i][j][2], dp[i][j][3])); }; }; }; return res; }; console.log(longestLine(arr));
La sortie dans la console sera -
3
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!