Файлы и большие данные · тема 6 из 8

От полного перебора к O(n)

Оптимизация · тренировочная база для ЕГЭ 27

01 · Пойми идею

Одна идея — один пример

Сумму каждого окна длины k можно обновлять: убрать элемент, вышедший слева, и добавить новый справа. Это O(n), вместо пересчёта всех k элементов.

a = [2, 5, 1, 4]
print(sum(a[:2]))

02 · Добавь следующий шаг

Теперь решаем самостоятельно

Лучший результат инициализируют суммой первого окна, а не нулём. Тогда отрицательные данные не ломают ответ.

Твоя задача

Первая строка — k. Вторая — список n целых чисел, 1 ≤ k ≤ n. Выведи максимальную сумму k последовательных элементов. Для больших n используй скользящее окно.

Пример входных данных и результата

Ввод:

2
2 5 1 4

Вывод:

7
Черновик и файл программы

Черновик сохраняется в этом браузере. Ctrl/⌘ + S — сохранить.

Результаты проверки

Напиши решение и нажми «Проверить код». Данные каждого теста подаются автоматически.

    Нужна подсказка?

    Следующее окно: current + a[i] - a[i-k].

    На чём легко ошибиться

    Это тренировочный алгоритм, а не универсальное решение всех вариантов №27: модель надо выбирать по условию.

    Разобрать один из способов решения

    Сначала попробуй написать код сам. Сравни алгоритм, затем закрой разбор и воспроизведи решение без подсказки.

    k = int(input())
    a = list(map(int, input().split()))
    current = best = sum(a[:k])
    for i in range(k, len(a)):
        current += a[i] - a[i-k]
        best = max(best, current)
    print(best)

    Тесты проверяют результат на учебных примерах, но не доказывают правильность для любого входа. Объясни каждую строку и предложи собственный тест.

    03 · Закрепи

    Перед следующей темой

    Назови входные данные, результат, основной шаг алгоритма и граничный случай. Если использовал разбор, напиши решение заново. Для свободных экспериментов открой Python онлайн.

    Все темы этого курса
    1. Файл: прочитать и проверить формат
    2. Строки таблицы и повторы
    3. Соседние элементы и максимум
    4. Самая длинная цепочка
    5. Отбор под ограничение
    6. От полного перебора к O(n)
    7. Кратчайший путь: хранить лучший результат
    8. Точки, расстояние и выбор центра

    Программа подготовлена по темам банка «Академии С». Официальные документы: ФИПИ. Справочник языка: Python. Не все экзаменационные задачи нужно решать программой: например, работа в таблицах требует освоения табличного редактора.