Zwei-Zeiger- und Schiebefenstermuster
Muster 1: Konstantes Fenster (wie Fenster = 4 oder ein ganzzahliger Wert)
Ermitteln Sie beispielsweise bei einem gegebenen Array von (-ve und ve) Ganzzahlen die maximale Summe für das zusammenhängende Fenster der Größe k.
Muster 2:(Variable Fenstergröße) Größtes Subarray/Teilzeichenfolge mit Muster 3: Anzahl der Unterarrays/Teilzeichenfolgen, wobei Dieses Problem kann mit Muster 2 Dies kann unterteilt werden in Muster 4: Finden Sie das kürzeste/minimale Fenster Verschiedene Ansätze für Muster 2: Besserer Ansatz mit den beiden Zeigern und dem Schiebefenster Optimaler Ansatz: Ein optimaler Ansatz besteht darin, die linke Seite nur zu verkleinern, solange die Subarray-Länge größer als maxLen ist, wenn das Subarray die Bedingung (
Dies ist sehr schwer zu lösen, da es schwierig wird, wann man expandiert (rechts) oder wann man schrumpft (links).
gelöst werden
Zum Lösen von Problemen wie dem Ermitteln der Anzahl von Teilzeichenfolgen, bei denen Summe =k.
Beispiel: Größtes Subarray mit Summe
public class Sample{
public static void main(String args[]){
n = 10;
int arr[] = new int[n];
//Brute force approach for finding the longest subarray with sum k) break; /// optimization if the sum is greater than the k, what is the point in going forward?
}
}
//O(n n) in the worst case r will move from 0 to n and in the worst case left will move from 0 0 n as well so 2n
int left = 0;
int right =0;
int sum = 0;
int maxLen = 0;
while(right
Wir wissen, dass wir, wenn wir das Subarray finden, seine Länge in maxLen speichern, aber wenn wir beim Hinzufügen von arr[right] die Summe größer als k werden, verkleinern wir derzeit nach links, indem wir sum = sum-arr[left] und left ausführen.
Wir wissen, dass die aktuelle maximale Länge maxLen ist. Wenn wir den linken Index weiter verkleinern, erhalten wir möglicherweise ein weiteres Subarray, das die Bedingung erfüllt ( maxLen hat, dann wird nur maxLen aktualisiert. int right =0;
int sum = 0;
int maxLen = 0;
while(right
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3