Wednesday, 8 February 2017

Mouvement Moyenne Leetcode

Version beaucoup plus simple: public class MovingAverageInSlidingWIndow int windowsize File d'attente de file d'attente int somme public MovingAverageInSlidingWIndow (int windowsize) this. windowsize windowsize this. queue nouveau LinkedList () this. sum 0 trouve la moyenne mobile après avoir inséré l'élément n dans le flux de données private double findMovingAverage (int N) if (queue. size () gt windowsize - 1) somme somme - queue. poll () queue. offer (n) somme somme n retour (double) somme queue. size () public static void main (String args) int Windowsize 3 MovingAverageInSlidingWIndow m nouveau MovingAverageInSlidingWIndow (windowsize) pour (int i 1 i lt 20 i) System. out. println (quotAfter Ajout de quot i quot à la file d'attente: Moyenne est: quot m. findMovingAverage (i)) Somme courante des éléments dans la file d'attente dans la variable globale. Ainsi, la réduction du calcul dans next () méthode. Public class MovingAverage LinkedList file d'attente int size int somme 0 maintient la somme de la file d'attente Initialiser votre structure de données ici. Public MovingAverage (int size) this. queue nouveau LinkedList () this. size taille public double next (int val) queue. offer (val) somme val if (queue. size () gtthis. size) sum - queue. poll () Étant donné un flux d'entiers et une taille de fenêtre, calculer la moyenne mobile de tous les entiers dans la fenêtre coulissante. Par exemple, MovingAverage m nouveau MovingAverage (3) m. next (1) 1 m. next (10) (1 10) 2 m. next (3) (1 10 3) 3 m. next (5) (10 3 5 ) 3 Nous pouvons utiliser une file d'attente bornée pour enregistrer les derniers n entiers dans la fenêtre et définir une variable sumN pour enregistrer la somme des nombres dans la fenêtre. Chaque fois qu'un nouveau numéro est enregistré, nous mettons à jour sumN par moins la tête de la file et ajoutez le nombre actuel. Nous supprimons également la tête de la file d'attente et ajoutons le numéro courant à la fin de la file d'attente. Voir la solution Java suivante: Moyenne mobile JavaThanks pour les solutions concernant ce problème. Juste une petite remarque concernant votre troisième solution. Le principal problème est qu'il n'utilise pas réellement l'avantage de cette définition récursive. Vous ne devriez pas appeler pow (x, half) pow (x, half) comme that8217s faisant la récursion deux fois pour retourner le même résultat. Il suffit de stocker la valeur dans une variable, et vous devriez avoir log (n) calculs. (X, n) retourne x si n (n) retourne x si n (n) retourne xx si (n 2 0) retour (Pow (x, n 2), 2) sinon retourner x pow (pow (x, n 2), 2)


No comments:

Post a Comment