Изучение нескольких методов поиска непрерывного подмассива с заданной суммой

В этой статье блога мы рассмотрим различные методы решения задачи поиска непрерывного подмассива, сумма которого равна заданному числу. Мы рассмотрим различные алгоритмы и предоставим примеры кода для иллюстрации каждого подхода. К концу этой статьи вы получите полное представление о различных методах эффективного решения этой проблемы.

Метод 1: подход грубой силы
Метод грубой силы включает в себя проверку всех возможных подмассивов и вычисление их сумм. Вот пример реализации на Python:

def find_subarray_sum(arr, target_sum):
    n = len(arr)
    for i in range(n):
        current_sum = arr[i]
        if current_sum == target_sum:
            return [i, i]
        for j in range(i + 1, n):
            current_sum += arr[j]
            if current_sum == target_sum:
                return [i, j]
    return None

Метод 2: техника скользящего окна
Техника скользящего окна — это оптимизированный подход, который поддерживает окно элементов, сумма которых равна целевой сумме. Вот пример реализации:

def find_subarray_sum(arr, target_sum):
    n = len(arr)
    window_sum = arr[0]
    start = 0
    for end in range(1, n):
        while window_sum > target_sum and start < end - 1:
            window_sum -= arr[start]
            start += 1
        if window_sum == target_sum:
            return [start, end - 1]
        window_sum += arr[end]
    return None

Метод 3: метод префиксной суммы
Метод префиксной суммы включает в себя вычисление совокупной суммы элементов массива и ее использование для поиска подмассивов с желаемой суммой. Вот пример реализации:

def find_subarray_sum(arr, target_sum):
    prefix_sum = {0: -1}
    current_sum = 0
    for i, num in enumerate(arr):
        current_sum += num
        if current_sum - target_sum in prefix_sum:
            return [prefix_sum[current_sum - target_sum] + 1, i]
        prefix_sum[current_sum] = i
    return None

Метод 4: подход с двумя указателями
Подход с двумя указателями — еще один эффективный метод поиска подмассива с заданной суммой. Он использует два указателя для сканирования массива и настройки окна на основе текущей суммы. Вот пример реализации:

def find_subarray_sum(arr, target_sum):
    n = len(arr)
    start = 0
    end = 0
    current_sum = 0
    while end < n:
        if current_sum == target_sum:
            return [start, end - 1]
        elif current_sum < target_sum:
            current_sum += arr[end]
            end += 1
        else:
            current_sum -= arr[start]
            start += 1
    return None

В этой статье мы рассмотрели четыре различных метода поиска непрерывного подмассива, сумма которого равна заданному числу. Мы обсудили метод грубой силы, метод скользящего окна, метод суммы префиксов и метод двух указателей. Каждый метод имеет свои преимущества и может использоваться исходя из конкретных требований задачи. Применяя эти алгоритмы, вы можете эффективно решить проблему суммы подмассивов в различных сценариях.