Maison  >  Article  >  interface Web  >  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

王林
王林avant
2023-09-21 17:37:171336parcourir

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]
];

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]

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));

Output

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:DHTML-JavaScriptArticle suivant:DHTML-JavaScript