In diesem zweiten Teil unserer Serie tauchen wir in eines der vielseitigsten Muster für die Lösung von Coding -Interviewfragen ein: das Schiebenfenster. Diese Technik ist unglaublich nützlich, um Probleme zu optimieren, die Subtarrays oder Substrings von zusammenhängenden Elementen betreffen, z. B. die Maximierung der Summen, das Finden spezifischer Bedingungen innerhalb einer Sequenz oder das Arbeiten mit Substrings in Strings.
Bevor wir beginnen, sollten Sie nach einem umfassenden Leitfaden für Coding-Interviews suchen, um das Coding-Interview zu überprüfen, ein Muss für alle, die es ernst meinen, einen Job bei Top-Tech-Unternehmen zu erledigen.
Das Schiebenfenstermuster ist eine Technik, mit der Sie Probleme effizient lösen können. Anstatt die Teilmenge jedes Mal neu zu berechnen, wenn Sie das Fenster bewegen, behält diese Technik eine laufende Gesamt- oder Bedingung bei und rutscht über die Daten, um unnötige Arbeiten zu minimieren.
Beispiel Problem : Finden Sie eine Reihe von Ganzzahlen und eine Nummer k, finden Sie die maximale Summe eines Teilestiers der Größe k.
def max_sum_subarray(arr, k): # Initialize variables to store the maximum sum and the current window sum. max_sum = 0 window_sum = 0 # First, calculate the sum of the initial window (first 'k' elements). for i in range(k): window_sum = arr[i] # Set the max_sum to the initial window's sum. max_sum = window_sum # Now, slide the window across the array. # Start from the kth element and move until the end of the array. for i in range(k, len(arr)): # Slide the window by subtracting the element that is no longer in the window # (arr[i - k]) and adding the new element (arr[i]). window_sum = arr[i] - arr[i - k] # Update max_sum if the current window sum is greater than the previous max_sum. max_sum = max(max_sum, window_sum) # Return the maximum sum found. return max_sum
Erläuterung:
Beispiel problem : Finden Sie die kleinste zusammenhängende Subtarray, deren Summe größer als oder gleich s.
, um eine Reihe von Ganzzahlen und eine Nummer s zu finden.
def smallest_subarray_with_sum(arr, S): # Initialize variables: # window_sum: to store the sum of the current window. # min_length: to store the length of the smallest subarray found. # window_start: the starting index of the sliding window. window_sum = 0 min_length = float('inf') # Start with a large number to compare minimum lengths. window_start = 0 # Iterate over the array with window_end being the right boundary of the window. for window_end in range(len(arr)): # Add the current element to the window_sum. window_sum = arr[window_end] # While the current window's sum is greater than or equal to S: while window_sum >= S: # Calculate the current window size and update min_length if smaller. min_length = min(min_length, window_end - window_start 1) # Shrink the window from the left by removing the element at window_start. window_sum -= arr[window_start] # Move the start of the window to the right. window_start = 1 # If min_length was updated, return it; otherwise, return 0 (meaning no valid subarray was found). return min_length if min_length != float('inf') else 0def smallest_subarray_with_sum (arr, s): # Variablen initialisieren: # window_sum: So speichern die Summe des aktuellen Fensters. # min_length: Um die Länge der kleinsten Subarray zu speichern. # window_start: Der Startindex des Schiebebefensters. window_sum = 0 min_length = float ('inf') # Beginnen Sie mit einer großen Zahl, um die Mindestlängen zu vergleichen. window_start = 0 # Über das Array iterieren, wobei Window_end die rechte Grenze des Fensters ist. für window_end im Bereich (len (arr)): # Fügen Sie das aktuelle Element dem window_sum hinzu. window_sum = arr [window_end] # Während die Summe des aktuellen Fensters größer oder gleich s: während window_sum> = s: # Berechnen Sie die aktuelle Fenstergröße und aktualisieren Sie min_length, falls kleiner. min_length = min (min_length, window_end - window_start 1) # Verkleinern Sie das Fenster von links, indem Sie das Element am window_start entfernen. window_sum -= arr [window_start] # Bewegen Sie den Beginn des Fensters nach rechts. window_start = 1 # Wenn min_length aktualisiert wurde, geben Sie es zurück. Ansonsten return 0 (dh kein gültiges Subtarray wurde gefunden). return min_length wenn min_length! = float ('inf') else 0
Erläuterung
:Definieren Sie die Fenstergrenzen
Setzen Sie eine Anfangsbedingung
schieben Sie das Fenster
prüfen und aktualisieren Ergebnisse
längste Substring, ohne Zeichen zu wiederholen
Maximale Summe Subtarray der Größe k
Kleinstes Subtarray mit einer gegebenen Summe
denken Sie in den Fenstergrenzen
Verwenden Sie einen HashMap oder einsatz für dynamische Windows
]
Beginnen Sie mit Brute-Force und optimieren Sie dannsuchen nach optimalen Bedingungen : Wenn das Problem eine Optimierungskomponente hat (z.
Im nächsten Artikel werden wir die
zwei Zeigertechnikenuntersuchen, eine weitere hochwirksame Strategie, die den Ansatz des Schiebungsfensters in Problemen, die Paare oder Vergleiche zwischen Elementen beinhalten, häufig ergänzt. Bleib dran für Teil 3!
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