Проходите массив один раз, сохраняя уже встреченные числа и проверяя наличие дополнения до target.
LeetCode #1 — Напишите функцию, которая принимает массив чисел и target и возвращает индексы двух чисел, сумма которых равна target.
Проходите массив один раз, сохраняя уже встреченные числа и проверяя наличие дополнения до target.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Проходите массив один раз, сохраняя уже встреченные числа и проверяя наличие дополнения до target.
Для целых чисел с точной арифметикой Number решение имеет ожидаемые O(n) времени и O(n) памяти. Один индекс нельзя использовать дважды, поэтому проверка выполняется до добавления текущего элемента.
function twoSum(nums, target) {
const seen = new Map();
for (let i = 0; i < nums.length; i++) {
const other = target - nums[i];
if (seen.has(other)) return [seen.get(other), i];
seen.set(nums[i], i);
}
return null;
}
Для [3, 3] и 6 результат [0, 1]; при отсутствии пары возвращается null. Для произвольных дробей заранее определяют допустимую погрешность.