Проходите массив один раз, сохраняя уже встреченные числа и их индексы. Для текущего числа ищите дополнение target − value.
Задача Two Sum: дан массив чисел и целевое число target. Найдите индексы двух чисел, сумма которых равна target. Какова сложность вашего решения?
Проходите массив один раз, сохраняя уже встреченные числа и их индексы. Для текущего числа ищите дополнение target − value.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Проходите массив один раз, сохраняя уже встреченные числа и их индексы. Для текущего числа ищите дополнение target − value.
function twoSum(nums, target) {
const seen = new Map();
for (let i = 0; i < nums.length; i++) {
const needed = target - nums[i];
if (seen.has(needed)) return [seen.get(needed), i];
seen.set(nums[i], i);
}
return null;
}
Индекс записывается после поиска, поэтому один элемент не используется дважды. Для обычной хеш-таблицы ожидаемое время O(n), дополнительная память O(n). Предполагаются конечные числа с подходящей для задачи точностью.