Узнать ближайшие числа

Рейтинг: 0Ответов: 2Опубликовано: 10.03.2015

Всем привет.

Есть такая задача. Допустим, есть число 150. Есть массив с числами [145, 5, 7, 148, 161,190,153 и т.д.].

Каким образом можно узнать ближайшее меньшее и ближайшее большее число? (В данном примере это должны быть числа 148 и 153.) Я встрял ч.г. с этим вопросом. Заранее всем спасибо.

Ответы

▲ 5

Вот еще решение js(babel) как можно узнать ближайшее меньшее и ближайшее большее число в массиве.

const data = [145, 5, 7, 148, 161, 190, 153];
const number = 150;

const closestRight = Math.min(...data.filter(v => v > number));
const closestLeft = Math.max(...data.filter(v => v < number));
▲ 1

Код писать не буду, покажу алгоритм (возможно, не самый оптимальный, ручаться за это не стану)

  1. Заводите две переменные, одна из которых (назовем ее minApproach) будет хранить наиболее близкое число, которое меньше заданного, вторая (назовем ее maxApproach) - наиболее близкое из тех, что больше заданного
  2. Присваиваете этим переменным соответствующие значения. для minApproach - значение первого элемента, которое меньше заданного числа. Для maxApproach - первое значение, которое больше заданного.
  3. Если какое-то из двух значений на предыдущем шаге не найдено (проще говоря, если заданное значение является минимумом или максимумом массива), то одно из ближних значений (minApproach или maxApproach) искать не имеет смысла
  4. Бежите в цикле по всем элементам массива и сравниваете каждый с двумя вышеуказанными переменными
  5. если очередной элемент массива больше заданного числа (150) и при этом меньше maxApproach, то записываем его значение в maxApproach. Таким же образом сравниваем с minApproach с той лишь разницей, что элемент должен быть меньше заданного, но больше maxApproach

Собственно, все