Один из самых популярных вопросов по кодированию включает в себя сумму двух чисел. «Учитывая непустой массив различных целых чисел и целевую сумму, найдите в массиве два числа, которые в сумме дают целевую сумму». Или возможно, что никакие числа не соответствуют целевой сумме. Так, например, с учетом ввода: [[3, 5, -4, 8, 11, 1, -1, 6] и целевой суммы 10, выход может быть [-1, 11].

Мы собираемся начать с создания хэша для хранения номеров, которые мы уже посетили в нашем цикле. Таким образом, мы можем легко получить к ним доступ, если они уже были посещены, или мы можем легко пропустить их, если мы знаем, что они не соответствуют нашему текущему номеру.

Затем мы начнем перебирать наш массив с помощью For… Of Loop. Если вы не знакомы с подобным циклом, я настоятельно рекомендую вам взглянуть на некоторую документацию. Для каждого элемента, который мы повторяем, мы будем вычислять возможное совпадение. Мы можем сделать это, вычтя это число из targetSum, переданного в функцию.

Теперь, когда мы знаем, какое у нас число и каково его потенциальное совпадение, давайте посмотрим, есть ли это потенциальное совпадение уже в нашем хеш-коде. Если это так, то мы решили проблему и можем вернуть массив чисел и возможное совпадение.

Однако, если его нет в нашем хеш-коде nums, тогда мы захотим добавить наш текущий номер к хешу. Итак, давайте создадим оператор else, который позаботится об этом. Я собираюсь установить для своего числа значение «истина», но вы действительно можете установить его на что угодно.

Наконец, нам нужен базовый вариант. Если в массиве нет абсолютно никаких пар, которые складываются в targetSum, тогда мы хотим вернуть пустой массив. Итак, давайте вернем пустой массив вне нашего цикла For, чтобы учесть это.

Вот и все! Поскольку эта задача будет выполняться столько раз, сколько длина массива, она имеет линейную временную сложность: O (n).