Min, Max, Sum и накопительные итоги
Агрегируйте список за один проход
«Min, Max, Sum и накопительные итоги» — бесплатный урок Competitive Programming Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Competitive Programming Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Competitive Programming Academy содержит 4 уроков всего.
Агрегация за один проход
Многим задачам нужно получить из массива всего одно число. Встроенные средства Python выполняют такую агрегацию за один быстрый проход по списку.
a = [4, 1, 7, 3]Суммирование элементов
sum(a) складывает все элементы и возвращает итог. Эта операция выполняется со скоростью реализации на C, поэтому предпочитайте её собственному циклу накопления.
total = sum(a) # 15Минимум и максимум
min(a) и max(a) возвращают наименьшее и наибольшее значения. Они один раз просматривают весь список за O(n).
lo, hi = min(a), max(a)Сравнение двух чисел
min и max также принимают отдельные аргументы. max(x, y) выбирает большее из двух значений, не создавая предварительно список.
best = max(score, best)Агрегация с ключом
Передайте функцию-ключ, чтобы сравнивать по производному значению. max(words, key=len) возвращает самое длинное слово, а не лексикографически максимальное.
longest = max(words, key=len)Защита от пустого списка
min и max завершаются с ошибкой на пустом списке. Передайте default= или сначала проверьте длину, чтобы избежать ошибки при выполнении.
hi = max(a, default=0)Идея накопительных итогов
Накопительная сумма обновляется по мере прохода по массиву. Это основа префиксных сумм и многих приёмов подсчёта.
run = 0
for x in a:
run += xСохраняйте лучший результат
Храните переменную с лучшим результатом во время просмотра массива, чтобы решать задачи типа поиска максимального подмассива за один проход.
best = a[0]
for x in a:
best = max(best, x)Создание префиксного списка
Сохраните каждую накопительную сумму в списке, чтобы получить префиксный массив. Позже суммы на отрезках можно находить вычитанием двух элементов.
pre = [0]
for x in a:
pre.append(pre[-1] + x)Сокращение с accumulate
itertools.accumulate вычисляет накопительные суммы за Вас, поэтому префиксный массив можно надёжно создать одной строкой.
from itertools import accumulate
pre = list(accumulate(a))Остерегайтесь мифов о переполнении
Хорошая новость: целые числа Python имеют неограниченную разрядность, поэтому большие суммы не переполняются. Настоящая опасность — медленный код, а не неверная арифметика.
huge = sum(range(10**6)) # fineБыстрая проверка
Вам нужно найти самое длинное слово в списке. Какой вызов правильный?
Повторение: сила одного прохода
Теперь Вы умеете суммировать, находить крайние значения и вычислять накопительные суммы за один проход. Такие агрегации превращают многие задачи о массивах в один цикл. ✨
Часто задаваемые вопросы
Урок «Min, Max, Sum и накопительные итоги» бесплатный?
Да — полный текст урока «Min, Max, Sum и накопительные итоги» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Competitive Programming Academy, подпишись на CoddyKit PRO. Курс Competitive Programming Academy содержит 4 уроков всего.
Чему я научусь в уроке «Min, Max, Sum и накопительные итоги»?
Агрегируйте список за один проход Ты практикуешь Competitive Programming Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Competitive Programming Academy?
Предыдущий опыт не требуется. Competitive Programming Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Min, Max, Sum и накопительные итоги»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Competitive Programming Academy?
Да. Каждый урок Competitive Programming Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Списки, индексы и срезы для CP
- Быстро создавайте массивы с включениями
- Min, Max, Sum и накопительные итоги
- Находите индекс, а не только значение