Программа курса:

1.1 - Часть 1 1.2 - Часть 2 1.3 - Часть 3 1.4 - Часть 4 1.5 - Часть 5 1.6 - Часть 6 1.7 - Часть 7 1.8 - Часть 8 1.9 - Часть 9 1.10 - Часть 10 1.11 - Часть 11 1.12 - Часть 12
2.1 - Часть 1 2.2 - Часть 2 2.3 - Часть 3 2.4 - Часть 4 2.5 - Часть 5 2.6 - Часть 6
3.1 - Часть 1

Разбор задачи: Целевая Сумма

Предложенный нами код решения:

def target_sum(nums, target):
    num_to_index = {}

    # Проходим по каждому числу в списке
    for i, num in enumerate(nums):
        # Вычисляем число, которое необходимо найти
        complement = target - num

        # Если дополнение уже в словаре, возвращаем индексы
        if complement in num_to_index:
            return [num_to_index[complement], i]

        # Если дополнения нет, добавляем число в словарь
        num_to_index[num] = i

Что делает алгоритм:

  1. Создаёт пустой словарь num_to_index, который будет хранить числа из списка nums и их индексы.
  2. Последовательно проходит по каждому числу в списке nums с помощью цикла for.
  3. Для каждого числа num вычисляет разницу target - num, называемую дополнением (complement).
  4. Проверяет, содержится ли это дополнение в словаре:
    • Если дополнение уже есть, значит, найдено два числа, которые дают сумму target. Функция возвращает индексы этих чисел.
    • Если дополнение отсутствует, текущее число и его индекс добавляются в словарь для дальнейшей проверки.

Пример работы алгоритма:

Входные данные:

nums = [1, 5, 3, 8], target = 11
  1. Итерация 1:
    • Текущее число: 1, индекс: 0
    • Вычисляем дополнение: 11 - 1 = 10
    • Проверяем: 10 отсутствует в словаре.
    • Добавляем число в словарь: {1: 0}.
  2. Итерация 2:
    • Текущее число: 5, индекс: 1
    • Вычисляем дополнение: 11 - 5 = 6
    • Проверяем: 6 отсутствует в словаре.
    • Добавляем число в словарь: {1: 0, 5: 1}.
  3. Итерация 3:
    • Текущее число: 3, индекс: 2
    • Вычисляем дополнение: 11 - 3 = 8
    • Проверяем: 8 отсутствует в словаре.
    • Добавляем число в словарь: {1: 0, 5: 1, 3: 2}.
  4. Итерация 4:
    • Текущее число: 8, индекс: 3
    • Вычисляем дополнение: 11 - 8 = 3
    • Проверяем: 3 уже есть в словаре с индексом 2.
    • Возвращаем [2, 3].

Итог:

Функция возвращает [2, 3], так как nums[2] + nums[3] == 11.


Другие примеры:

Входные данные:

nums = [2, 7, 11, 15], target = 9
  1. Число 2, индекс 0: Дополнение 7 отсутствует.
  2. Число 7, индекс 1: Дополнение 2 найдено в словаре.
  3. Возвращается [0, 1].

Результат:

[0, 1]

 

 

 

Перейти к следующему шагу

Возникли вопросы при прочтении лекции? Задайте вопрос в комментариях

Комментарии