2762. Kontinuierliche Subarrays
Schwierigkeit:Mittel
Themen: Schiebefenster, Array, geordnete Menge, Heap (Prioritätswarteschlange), Warteschlange, monotone Warteschlange, zwei Zeiger, geordnete Karte, Hash-Tabelle, dynamische Programmierung, Zählen, Mathematik, binärer Suchbaum, Segmentbaum, Baum, Stapel, binäre Suche, monotoner Stapel, Memoisierung, Iterator, Greedy, Tiefensuche, Rekursion
Sie erhalten ein 0-indiziertes ganzzahliges Array mit Zahlen. Ein Subarray von Nums heißt kontinuierlich, wenn:
Gibt die Gesamtzahl der kontinuierlichen Subarrays zurück.
Ein Subarray ist eine zusammenhängende nicht leere Folge von Elementen innerhalb eines Arrays.
Beispiel 1:
Beispiel 2:
Einschränkungen:
Hinweis:
Lösung:
Wir können die Schiebefenstertechnik verwenden, um die Anzahl kontinuierlicher Subarrays effizient zu berechnen. Wir behalten ein gültiges Fenster bei, in dem die Differenz zwischen den Maximal- und Minimalwerten im Subarray höchstens 2 beträgt. Um die Maximal- und Minimalwerte innerhalb des aktuellen Fensters effizient zu verfolgen, können wir zwei Deques (eine) verwenden für das Maximum und eine für das Minimum).
Lassen Sie uns diese Lösung in PHP implementieren: 2762. Kontinuierliche Subarrays
<?php /** * @param Integer[] $nums * @return Integer */ function continuousSubarrays($nums) { ... ... ... /** * go to ./solution.php */ } // Example usage $nums1 = [5, 4, 2, 4]; echo continuousSubarrays($nums1) . "\n"; // Output: 8 $nums2 = [1, 2, 3]; echo continuousSubarrays($nums2) . "\n"; // Output: 6 ?> <h3> Erläuterung: </h3> <ol> <li><p><strong>Schiebefenster:</strong><br><br> Der linke Zeiger bewegt sich nur dann vorwärts, wenn das Fenster ungültig wird (d. h. wenn die Differenz zwischen dem Maximal- und Minimalwert 2 überschreitet). Der rechte Zeiger erweitert das Fenster, indem er das Array durchläuft.</p></li> <li> <p><strong>Deques für Maximum und Minimum:</strong></p> <ul> <li>Die maxDeque enthält immer Indizes von Elementen in absteigender Reihenfolge und stellt sicher, dass der Maximalwert im aktuellen Fenster vorne liegt (maxDeque[0]).</li> <li>Die minDeque enthält immer Indizes von Elementen in aufsteigender Reihenfolge und stellt sicher, dass der Mindestwert im aktuellen Fenster vorne liegt (minDeque[0]).</li> </ul> </li> <li><p><strong>Subarrays zählen:</strong><br><br> Für jedes Rechts ist die Anzahl der gültigen Subarrays, die rechts enden, gleich (rechts – links 1), da alle Subarrays von links nach rechts gültig sind.</p></li> <li><p><strong>Effizienz:</strong><br><br> Jedes Element wird höchstens einmal zu den Deques hinzugefügt und daraus entfernt, wodurch die Zeitkomplexität <strong>O(n)</strong> wird. Die Raumkomplexität ist aufgrund der Deques <strong>O(n)</strong>.</p></li> </ol> <hr> <h3> Ausgabe </h3> <pre class="brush:php;toolbar:false">8 6
Zeitkomplexität:
Weltraumkomplexität:
Diese Implementierung ist effizient und funktioniert innerhalb der bereitgestellten Einschränkungen.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt vonKontinuierliche Subarrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!