Maison >interface Web >js tutoriel >Décrypter l'entretien de codage : partie du modèle de fenêtre coulissante
Dalam bahagian kedua siri kami ini, kami menyelami salah satu corak yang paling serba boleh untuk menyelesaikan soalan temu bual pengekodan: Tetingkap Gelongsor. Teknik ini amat berguna untuk mengoptimumkan masalah yang melibatkan subarray atau subrentetan unsur bersebelahan, seperti memaksimumkan jumlah, mencari keadaan khusus dalam jujukan atau bekerja dengan subrentetan dalam rentetan.
Sebelum kita bermula, jika anda mencari panduan komprehensif untuk menyediakan temu duga pengekodan, pertimbangkan untuk menyemak Temuduga Pemecahan Pengekodan, buku yang mesti dimiliki oleh sesiapa yang serius untuk mendapatkan pekerjaan di syarikat teknologi terkemuka.
Corak Tetingkap Gelongsor ialah teknik yang membolehkan anda menyelesaikan masalah dengan cekap di mana anda perlu mempertimbangkan subset data daripada set data yang lebih besar (seperti subarray tatasusunan atau subrentetan rentetan). Daripada mengira semula subset setiap kali anda mengalihkan tetingkap, teknik ini mengekalkan jumlah atau keadaan yang sedang berjalan, meluncur merentasi data untuk meminimumkan kerja yang tidak perlu.
Contoh Masalah: Diberi tatasusunan integer dan nombor k, cari jumlah maksimum mana-mana subbaris saiz 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
Penjelasan:
Contoh Masalah: Diberi tatasusunan integer dan nombor S, cari subray bersebelahan terkecil yang jumlahnya lebih besar daripada atau sama dengan S.
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 0
Penjelasan:
Tentukan sempadan tetingkap: Anda perlu menentukan permulaan dan penghujung tetingkap.
Tetapkan syarat awal: Untuk tetingkap tetap, mulakan jumlah/produk/syarat untuk tetingkap pertama. Untuk tetingkap dinamik, keadaan awal bergantung pada matlamat masalah.
Gelongsor tingkap:
Semak dan kemas kini keputusan: Selepas setiap pergerakan tetingkap, kemas kini keputusan (seperti jumlah maksimum, panjang minimum, dsb.) seperti yang diperlukan.
Sarisari terpanjang Tanpa Aksara Berulang
Subarray Jumlah Maksimum Saiz K
Le plus petit sous-tableau avec une somme donnée
Pensez en termes de limites de fenêtre : Commencez par réfléchir à l'endroit où la fenêtre doit commencer et se terminer. Cela vous aide à identifier la plage exacte avec laquelle vous travaillez.
Utilisez un hashmap ou un ensemble pour les fenêtres dynamiques : Lorsque vous traitez des sous-chaînes ou des éléments uniques, utilisez un ensemble pour suivre les éléments dans la fenêtre.
Commencez par la force brute, puis optimisez : Dans certains problèmes, commencer par une approche par force brute (comme vérifier tous les sous-tableaux possibles) peut vous aider à visualiser comment une fenêtre coulissante réduirait les travail.
Recherchez les conditions optimales : Si le problème comporte un composant d'optimisation (comme minimiser ou maximiser une somme ou une longueur), la fenêtre coulissante peut être une bonne solution.
Le modèle de fenêtre coulissante est un outil puissant pour résoudre de nombreux problèmes d'entretien de codage, en particulier ceux impliquant des séquences telles que des tableaux ou des chaînes. En maîtrisant à la fois les fenêtres coulissantes de taille fixe et dynamiques, vous pouvez résoudre plus efficacement un large éventail de problèmes.
Dans le prochain article, nous explorerons la Technique à deux pointeurs, une autre stratégie très efficace qui complète souvent l'approche par fenêtre glissante dans les problèmes impliquant des paires ou des comparaisons entre éléments.
Restez à l'écoute pour la partie 3 !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!