@we1

Как найти ближайшие числа из массива?

Дан массив из N чисел. Нужно найти от двух до N-1 ближайших друг к другу числе. Хотя бы два найти, уже будет хорошо.
То есть нужно не минимальные, не максимальные, не средние, а именно два числа, которые ближе друг к другу.
Например в массиве -22, -20, -4, -4.6, -1, 0, 0.3, 19.9, 20, 21 ближайшими окажутся 19.9 и 20.
Кажется слишком сложным для каждого числа создавать свой массив с разностью его и остальных чисел, потом искать в этих массивах минимальное значение и сортировать потом эти результаты из разных массивов. Должен же быть вариант попроще?
  • Вопрос задан
  • 3218 просмотров
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
Не покидает ощущение, что такую задачу на Codewars решал.

function findPair(input) {
  let minDiff = Infinity;
  let index = 0;

  for (let i = 0; i < input.length - 1; i++) {
    const cur = input[i];
    const next = input[i + 1];
    const diff = Math.abs(cur - next);

    if (diff < minDiff) {
      minDiff = diff;
      index = i;
    }
  }

  return input.slice(index, index + 2);
}

console.log(findPair([-22, -20, -4, -4.6, -1, 0, 0.3, 19.9, 20, 21]));
Ответ написан
@D3Nd3R
Можно сделать на основе kNN, вычисляем ближайших соседей для каждого числа в массиве, а дальше уже работаем с массивами соседей.
Такой подход будет работать и на не отсортированном массиве.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы