Программа курса:
Разбор задачи: Сумма четных чисел после запросов
Предложенный нами код:
def sumEvenAfterQueries(nums, queries):
"""
:param nums: List[int] - исходный массив целых чисел
:param queries: List[List[int]] - массив запросов
:return: List[int] - массив сумм чётных чисел после каждого запроса
"""
# Инициализируем начальную сумму чётных чисел
even_sum = sum(num for num in nums if num % 2 == 0)
result = []
# Обрабатываем каждый запрос
for val, idx in queries:
# Если текущее значение nums[idx] чётное, вычитаем его из even_sum
if nums[idx] % 2 == 0:
even_sum -= nums[idx]
# Обновляем значение nums[idx]
nums[idx] += val
# Если обновлённое значение nums[idx] чётное, добавляем его в even_sum
if nums[idx] % 2 == 0:
even_sum += nums[idx]
# Сохраняем текущую сумму чётных чисел
result.append(even_sum)
return resultИнициализация суммы четных чисел
even_sum = sum(num for num in nums if num % 2 == 0)
- Сначала мы вычисляем сумму всех четных чисел в массиве
nums. - Для этого используется генератор, который проверяет каждое число:
num % 2 == 0(остаток от деления на 2 равен нулю означает, что число четное).
Пример:
- Пусть
nums = [1, 2, 3, 4]. - Четные числа:
2, 4. even_sum = 2 + 4 = 6.
Инициализация результата
result = []
- В этот список мы будем записывать результат выполнения каждого запроса — текущую сумму четных чисел.
Обработка каждого запроса
for val, idx in queries:
- Мы перебираем все запросы из массива
queries, гдеval— значение, которое нужно прибавить, аidx— индекс в массивеnums, к которому это значение прибавляется.
Шаг 1: Уменьшаем even_sum, если число станет нечётным
if nums[idx] % 2 == 0:
even_sum -= nums[idx]
- Если текущее значение в
nums[idx]четное (например,nums[idx] = 4), то оно уже включено вeven_sum. - Но после изменения оно может стать нечетным, поэтому заранее исключаем его из суммы.
Пример:
- Пусть
nums = [1, 2, 3, 4],queries = [[1, 0]]. Начальноеeven_sum = 6. - В текущем запросе мы изменяем
nums[0](индекс 0, значение 1). - Поскольку
nums[0]нечетное,even_sumостается без изменений.
Шаг 2: Обновляем значение
nums[idx] += val
- Прибавляем значение
valк элементу массиваnums[idx].
Пример:
- Пусть
nums = [1, 2, 3, 4],queries = [[1, 0]]. - Мы изменяем
nums[0]наnums[0] + 1, т.е.nums = [2, 2, 3, 4].
Шаг 3: Добавляем число обратно в even_sum, если оно стало чётным
if nums[idx] % 2 == 0:
even_sum += nums[idx]
- После изменения проверяем, стало ли число четным. Если да, то добавляем его обратно в
even_sum.
Пример:
- После изменения
nums[0] = 2, это четное число, поэтомуeven_sum += 2. - Теперь
even_sum = 8.
Шаг 4: Сохраняем текущую сумму в результат
result.append(even_sum)
- Добавляем текущее значение
even_sumв массивresult.
Пример:
- После первого запроса результат:
result = [8].
Возвращаем результат
return result
- Возвращаем массив
result, содержащий сумму всех четных чисел после каждого запроса.
Пример выполнения
Рассмотрим пример:
nums = [1, 2, 3, 4]
queries = [[1, 0], [-3, 1], [-4, 0], [2, 3]]
- Начальное состояние:
nums = [1, 2, 3, 4], четные числа:2, 4,even_sum = 6. - Первый запрос:
[1, 0]- Обновляем
nums[0]:nums[0] = nums[0] + 1 = 2. - Новое состояние:
nums = [2, 2, 3, 4]. - Четные числа:
2, 2, 4. even_sum = 2 + 2 + 4 = 8.result = [8].
- Обновляем
- Второй запрос:
[-3, 1]- Уменьшаем
nums[1]:nums[1] = nums[1] - 3 = -1. - Новое состояние:
nums = [2, -1, 3, 4]. - Четные числа:
2, 4. even_sum = 2 + 4 = 6.result = [8, 6].
- Уменьшаем
- Третий запрос:
[-4, 0]- Уменьшаем
nums[0]:nums[0] = nums[0] - 4 = -2. - Новое состояние:
nums = [-2, -1, 3, 4]. - Четные числа:
-2, 4. even_sum = -2 + 4 = 2.result = [8, 6, 2].
- Уменьшаем
- Четвертый запрос:
[2, 3]- Увеличиваем
nums[3]:nums[3] = nums[3] + 2 = 6. - Новое состояние:
nums = [-2, -1, 3, 6]. - Четные числа:
-2, 6. even_sum = -2 + 6 = 4.result = [8, 6, 2, 4].
- Увеличиваем
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии