Алгоритмы - LeetCode 1 - Two Sum

Проходим массив и храним уже встреченные значения с индексами. Для каждого числа ищем target − число в словаре: так получаем разные индексы за ожидаемое O(n) времени и O(n) памяти.

Короткий ответ

Что ответить на собеседовании

Проходим массив и храним уже встреченные значения с индексами. Для каждого числа ищем target − число в словаре: так получаем разные индексы за ожидаемое O(n) времени и O(n) памяти.

Подробный разбор

Ответ с пояснениями

Условие

Алгоритмы - LeetCode 1 - Two Sum

Дано: задан массив целых чисел nums и целое число target. верните индексы двух чисел массива nums сумма которых равна target.

nums = [1,2,3,4,5], target = 3

Уточнения:

  1. задача имеет только одно верное сочетание индексов,
  2. нельзя использовать один и тот же индекс,
  3. расположение индексов в ответе не принципиально.

Ограничения:

  1. 2 <= nums.length <= 10^2,
  2. -10^9 <= nums[i] <= 10^9,
  3. -10^9 <= target <= 10^9

Пример:

Дано: nums = [1,16,34,65], target = 66 Ответ: [0,3]

Ответ

Проходим массив и храним уже встреченные значения с индексами. Для каждого числа ищем target − число в словаре: так получаем разные индексы за ожидаемое O(n) времени и O(n) памяти.

Сначала выполняется поиск, затем сохранение текущего элемента — один индекс не используется дважды.

def two_sum(nums, target):
    seen = {}
    for index, value in enumerate(nums):
        complement = target - value
        if complement in seen:
            return [seen[complement], index]
        seen[value] = index
    raise ValueError('No solution')

Для [1, 16, 34, 65] и 66 ответ [0, 3]. Повторяющиеся значения тоже поддерживаются: для [3, 3] и 6 вернутся [0, 1]. По условию решение существует, исключение защищает от входа вне контракта.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее