В этой второй части нашей серии мы погружаемся в один из самых универсальных шаблонов для решения вопросов кодирования: раздвижное окно. Этот метод невероятно полезен для оптимизации проблем, связанных с подборами или подстроками смежных элементов, таких как максимизация сумм, поиск конкретных условий в последовательности или работа с подстроками в строках.
, прежде чем мы начнем, если вы ищете всеобъемлющее руководство по подготовке к собеседованиям по кодированию, рассмотрите возможность проверки взлома интервью по кодированию, обязательную книгу для всех, кто серьезно относится к работе в ведущих технологических компаниях.
шаблон скользящего окна - это метод, который позволяет эффективно решать проблемы, в которых вам необходимо рассмотреть подмножество данных из более крупного набора данных (как субрай массива или подстроение строки). Вместо того, чтобы пересматривать подмножество каждый раз, когда вы перемещаете окно, этот метод поддерживает общее количество или условия, скользя по данным, чтобы минимизировать ненужную работу.
] пример проблемы : данный массив целых чисел и число k, найдите максимальную сумму любого субрайного размера 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]
Объяснение:
Пример проблемы : данный массив целых чисел и числа S, найдите наименьший смежный субрай, сумма которой больше или равна 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]
Объяснение:
определить границы окна : вам нужно определить начало и конец окна.
установите начальное условие : для фиксированных Windows, инициализируйте условие/продукт/продукт/условие для первого окна. Для динамических окон, начальное условие зависит от цели проблемы.
скользит окно :
]проверить и обновлять результаты : после каждого движения окна, обновите результат (например, максимальная сумма, минимальная длина и т. Д.) При необходимости.
самая длинная подстроение без повторяющихся символов
]максимальная сумма subarray of size k
]маленький Subarray с данной суммой
]подумайте в терминах границ окна : начните с размышления о том, с чего следует начинать и закончить. Это помогает вам определить точный диапазон, с которым вы работаете.
Используйте HASHMAP или SET для Dynamic Windows : при работе с подстроками или уникальными элементами, используйте набор, чтобы отслеживать элементы в окне.
: в некоторых проблемах, начиная с подхода грубой силы (например, проверка каждого возможного Subarray) может помочь вам визуализировать, как раздвижное окно уменьшит ненужную работу.
ищите оптимальные условия] ] ]
] Заключение, еще одна высокоэффективная стратегия, которая часто дополняет подход скользящего окна в задачах, которые включают пары или сравнения между элементами.
]следите за частью 3! ] ]
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3