Поиск пары чисел с нулевой суммой в массиве

Во время прохода храните 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).

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

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

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

Подробнее