Храните уже встреченные числа и ищите дополнение target − value. Первый пример ошибочен: 8 + 3 = 11, а пары с суммой 12 в нём вообще нет.
Определить первую подходящую пару чисел с заданной суммой
Храните уже встреченные числа и ищите дополнение target − value. Первый пример ошибочен: 8 + 3 = 11, а пары с суммой 12 в нём вообще нет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создать функцию, принимающую массив чисел и требуемую сумму, которая ищет первую найденную пару элементов, дающих эту сумму, и выводит их.
Примеры Ввод: [8,5,3,5,6], 12 Вывод: [8, 3]
Ввод: [1,18,20,7,1], 2 Вывод: [1, 1]
Ответ
Храните уже встреченные числа и ищите дополнение target − value. Первый пример ошибочен: 8 + 3 = 11, а пары с суммой 12 в нём вообще нет.
Считаем первой пару с наиболее ранним вторым элементом:
def first_pair(numbers, target):
seen = set()
for value in numbers:
complement = target - value
if complement in seen:
return [complement, value]
seen.add(value)
return None
Проверка выполняется до добавления, поэтому один элемент не используется дважды. Для [1, 18, 20, 7, 1] и суммы 2 результат [1, 1], а для первого массива и 12 — None. Ожидаемая сложность O(n), память O(n). Если «первая» означает лексикографически минимальную пару индексов, это нужно оговорить: порядок выбора может отличаться.