Maison >interface Web >js tutoriel >Programme JavaScript pour trouver le sous-tableau avec la plus petite moyenne

Programme JavaScript pour trouver le sous-tableau avec la plus petite moyenne

WBOY
WBOYavant
2023-08-23 23:33:131057parcourir

JavaScript 程序查找平均值最小的子数组

Nous allons écrire un programme pour trouver le sous-tableau avec la plus petite moyenne. Pour ce faire, nous allons parcourir le tableau et garder une trace du sous-tableau actuel et de sa somme. Pour chaque élément, nous calculerons la moyenne du sous-tableau actuel et la comparerons à la plus petite moyenne que nous ayons vue jusqu'à présent. S'il est inférieur, nous mettons à jour la moyenne minimale du sous-tableau ainsi que les indices de début et de fin. A la fin de l'itération, nous renvoyons le sous-tableau avec la plus petite moyenne.

Méthode

Pour trouver le sous-tableau avec la plus petite moyenne, nous pouvons suivre ces étapes -

  • Initialise deux variables, start et end, pour garder une trace de l'index de début et de fin du sous-tableau.

  • Utilisez for pour parcourir le tableau, en gardant une trace de la somme actuelle et de la plus petite moyenne trouvée jusqu'à présent.

  • À chaque itération, comparez la somme actuelle à la moyenne minimale, et si un nouveau minimum est trouvé, mettez à jour les variables Start et End.

  • Si la somme actuelle est supérieure à la moyenne minimale, avancez l'indice de départ jusqu'à ce que la somme soit inférieure à la moyenne minimale.

  • Répétez les étapes 2 à 4 jusqu'à ce que vous atteigniez la fin du tableau.

  • Le sous-tableau avec la plus petite moyenne est le sous-tableau commençant à start et se terminant à end.

Exemple

Étant donné un tableau d'entiers, trouvez le sous-tableau avec la plus petite moyenne.

Voici un exemple JavaScript complet et fonctionnel pour résoudre ce problème -

function findsmallestAverageSubarray(arr, k) {
   let minAvg = Number.POSITIVE_INFINITY;
   let minAvgStart = 0;
   let windowSum = 0;
   for (let i = 0; i < arr.length - k + 1; i++) {
      if (i === 0) {
         for (let j = 0; j < k; j++) {
            windowSum += arr[j];
         }
      } else {
         windowSum -= arr[i - 1];
         windowSum += arr[i + k - 1];
      }
      let windowAvg = windowSum / k;
      if (windowAvg < minAvg) {
         minAvg = windowAvg;
         minAvgStart = i;
      }
   }
   return arr.slice(minAvgStart, minAvgStart + k);
}

const arr = [1, 3, 6, -3, -4, 2, 5];
const k = 4;

console.log(findsmallestAverageSubarray(arr, k));

Instructions

    La fonction
  • findSmallestAverageSubarray prend en entrée un tableau d'entiers arr et un entier k, où k est le sous-tableau.

  • La fonction
  • renvoie le sous-tableau avec la plus petite moyenne.

  • minAvgLa variable est initialisée avec la plus grande valeur possible d'un nombre à virgule flottante.

  • La variable
  • minAvgStart est utilisée pour stocker l'index de départ du sous-tableau avec la plus petite moyenne.

  • La variable
  • windowSum est utilisée pour stocker la somme des éléments dans le sous-tableau actuel.

  • Boucle extérieurefor (let i = 0; i pour itérer la longueur k dans le tableau donné arr.

  • La boucle internefor (let j = 0; j est utilisée pour calculer la somme des éléments du sous-tableau actuel.

  • Le bloc
  • if (i === 0) est utilisé pour calculer la somme des éléments du premier sous-tableau.

  • Le bloc
  • else est utilisé pour calculer la somme des éléments dans les sous-tableaux restants. Il soustrait le premier élément du sous-tableau précédent et ajoute le dernier élément du sous-tableau actuel.

  • La variable
  • windowAvg est utilisée pour stocker la valeur moyenne du sous-tableau actuel.

  • Le bloc
  • if (windowAvg est utilisé pour mettre à jour la moyenne minimale et l'index de départ du sous-tableau avec la moyenne minimale.

  • Enfin, la fonction renvoie le sous-tableau avec la plus petite moyenne.

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