Tuesday, 31 October 2017

Moving Average Leetcode


Viel einfachere Version: public class MovingAverageInSlidingWIndow int windowsize Warteschlange int sum public MovingAverageInSlidingWIndow (int windowsize) this. windowsize windowsize this. queue new LinkedList () this. sum 0 findet den gleitenden Durchschnitt nach dem Einfügen von item n in den Datenstrom private double findMovingAverage (int N) if (queue. size () gt windowsize - 1) sum sum - queue. poll () warteschlange. offer (n) sum sum n return (double) sum queue. size () public static void main (String args) int Windowsize 3 MovingAverageInSlidingWIndow m new MovingAverageInSlidingWIndow (windowsize) für (int i 1 i lt 20 i) System. out. println (Nach dem Hinzufügen von Zitat in die Warteschlange: Durchschnitt ist: m. findMovingAverage (i)) Aktuelle Summe der Elemente in der Warteschlange in der globalen Variablen. Somit verringert sich die Berechnung im next () - Verfahren. Public class MovingAverage LinkedList-Warteschlange int size int sum 0 Holdsumme der Warteschlange Initialisieren Sie hier Ihre Datenstruktur. Öffentliches MovingAverage (int size) this. queue new LinkedList () this. size Größe public double next (int val) queue. offer (val) sum val if (queue. size () gtthis. size) sum - queue. poll () Angenommen, ein Strom von Ganzzahlen und eine Fenstergröße, berechnen Sie den gleitenden Durchschnitt aller Ganzzahlen im Schiebefenster. Zum Beispiel MovingAverage m neu 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 Wir können eine beschränkte Warteschlange verwenden, um die letzten n ganzen Zahlen im Fenster aufzuzeichnen und eine Variable sumN zu definieren, um die Summe der Zahlen im Fenster aufzuzeichnen. Jedes Mal, wenn eine neue Nummer registriert ist, aktualisieren wir sumN um minus den Kopf der Warteschlange und fügen Sie die aktuelle Nummer. Wir entfernen auch den Kopf aus der Warteschlange und fügen Sie die aktuelle Nummer am Ende der Warteschlange. Siehe die folgende Java-Lösung: Moving Average JavaThanks für Lösungen zu diesem Problem. Nur eine kleine Bemerkung über Ihre dritte Lösung. Das Hauptproblem ist, dass es nicht wirklich den Vorteil, dass rekursive Definition. Du solltest niemals pow (x, half) pow (x, half) als that8217s aufrufen, die die Rekursion zweimal ausführen, um das gleiche Ergebnis zurückzugeben. Nur speichern Sie den Wert in einer Variablen, und Sie sollten log (n) Berechnungen haben. (N, 0) return 1 if (n 2) Rückkehr xx if (n 2 0) Rückkehr (X, n 2), 2) sonst gibt es 1 x pow (pow (x, n 2), 2)

No comments:

Post a Comment