Maison > interface Web > js tutoriel > Trouver la plus longue ligne de 1 consécutifs dans une matrice en JavaScript

Trouver la plus longue ligne de 1 consécutifs dans une matrice en JavaScript

王林
Libérer: 2023-09-21 17:37:17
avant
1410 Les gens l'ont consulté

Trouver la plus longue ligne de 1 consécutifs dans une matrice en JavaScript

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]
];
Copier après la connexion

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
Copier après la connexion

car la ligne la plus longue commence à arr[0][1] et s'étend en diagonale jusqu'à -

arr[2][3]
Copier après la connexion

Exemple

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));
Copier après la connexion

Output

La sortie dans la console sera -

3
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal