Во время прохода храните Map числа в индекс. Для текущего x ищите уже встреченное -x: так находятся разные элементы, включая пару нулей.
Поиск пары чисел с нулевой суммой в массиве
Во время прохода храните Map числа в индекс. Для текущего x ищите уже встреченное -x: так находятся разные элементы, включая пару нулей.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию findTwo, которая получает массив целых чисел и возвращает индексы двух элементов, сумма которых равна нулю.
// findTwo([1, 2, 3, -1]) // [0, 3]
// findTwo([1, 2, 3, -1, -2, 0]) // [1, 4] wnw [0, 3]
// findTwo([1, 2, 3, 4]) // null
Ответ
Во время прохода храните Map числа в индекс. Для текущего x ищите уже встреченное -x: так находятся разные элементы, включая пару нулей.
function findTwo(values) {
const seen = new Map();
for (let index = 0; index < values.length; index++) {
const value = values[index];
if (seen.has(-value)) return [seen.get(-value), index];
if (!seen.has(value)) seen.set(value, index);
}
return null;
}
Возвращается первая найденная при проходе пара. Проверка выполняется до сохранения текущего индекса, поэтому один ноль сам с собой не образует пару. Ожидаемое время O(n), память O(n).