Нахождение ближайшего числа в массиве: диапазон -1000 до 1000
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для поиска значения в массиве, которое наиболее приближенно к заданному числу, можно использовать метод Array.prototype.reduce()
:
const nearest = (arr, target) => arr.reduce((a, b) => Math.abs(b – target) < Math.abs(a – target) ? b : a);
// Пример использования:
let closestNumber = nearest([5, 20, 12, 16, 25], 15);
console.log(closestNumber); // Выводится: 16
Принцип работы этого метода сводится к сравнению абсолютных разностей между элементами массива и заданным значением. Минимальное отклонение указывает на искомое число.
Будьте осторожны, рассматриваем граничные случаи: "Угадай, где моя кофейная чашка?"
Перед поиском необходимо убедиться, что мы отсекли возможные ошибки.
Проверяем корректность входных данных: цель установлена
Прежде всего, следует гарантировать, что исходные данные подготовлены корректно:
- Массив
arr
не должен быть пустым. - Все элементы массива обязаны быть числами.
- Задаваемое значение
target
обязано находиться в диапазоне от -1000 до 1000.
Теперь код выглядит следующим образом:
const nearest = (arr, target) => {
if (!arr.length) throw new Error("Массив пуст. 👻");
if (!arr.every(Number.isFinite)) throw new Error("Не все элементы массива являются числами. 🕵️");
if (isNaN(target) || Math.abs(target) > 1000) throw new Error("Значение target выходит за допустимые пределы. 🎯⛔");
return arr.reduce((a, b) => Math.abs(b – target) < Math.abs(a – target) ? b : a);
};
Упорядоченные массивы: порядок в мире хаоса
При работе с большими объемами данных оптимизация поиска возможна с использованием бинарного поиска, сложность которого составляет O(log N).
- Сперва сортируем массив.
- Затем мы применяем бинарный поиск для определения ближайшего индекса.
const binarySearchNearest = (arr, target) => {
let start = 0, end = arr.length – 1;
while (start <= end) {
let mid = Math.floor((start + end) / 2);
if (arr[mid] === target) return arr[mid]; // Обнаружено идеальное совпадение
arr[mid] < target ? start = mid + 1 : end = mid – 1;
}
const nearest = (arr[start] – target) < (target – arr[end]) ? arr[start] : arr[end];
return nearest;
};
Каррирование: утонченность в мире программирования
Каррирование обеспечивает возможность многократного использования функции в различных контекстах:
const curryNearest = target => arr =>
arr.reduce((a, b) => Math.abs(b – target) < Math.abs(a – target) ? b : a);
let nearestTo15 = curryNearest(15);
console.log(nearestTo15([5, 20, 12, 16, 25])); // Выводится: 16
Специальные сценарии: готовы к нестандартным ситуациям
Теперь мы подготовлены к решению более сложных задач.
Массив содержит целевое значение: точное совпадение!
В случае, если искомое число уже присутствует в массиве:
if (arr.includes(target)) return target;
Такой подход позволяет увеличить производительность при наличии точного совпадения.
Настройка каррирования: адаптируемся под изменения
С помощью функции curryNearest
они можем настроить целевое значение по своему усмотрению:
const nearestTo10 = curryNearest(10);
Использование библиотек для каррирования: на помощь приходит lodash
Мы можем использовать библиотеки, такие как Lodash, чтобы внедрить функционал каррирования:
const _ = require('lodash');
const curryNearest = _.curry((target, arr) => arr.reduce(/* ... */));
Визуализация: окунуться в 'Избранное' 🕶️
Поиск ближайшего числа напоминает поиски Нео из фильма "Матрица", который старается найти Оракула:
Матрица: [ 4, 30, 7, 14, 10, 3 ]
Нео (🕶️): 5
Морфеус (Math.abs
) помогает в этом поиске:
const closest = numbers.reduce((prev, curr) =>
Math.abs(curr – 5) < Math.abs(prev – 5) ? curr : prev);
И наш результирующий выбор:
Оракул: 4
Будет находиться рядом с истиной, которую ищет Нео (🕶️ 5).
Таким образом, вы научились находить Оракула в "Матрице". 🎯
Полезные материалы
- Array.prototype.reduce() – JavaScript | MDN — подробнее о методе reduce.
- javascript – Get the closest number out of an array – Stack Overflow — обсуждение способов поиска ближайшего числа на Stack Overflow.
- Math.abs() – JavaScript | MDN — описание функции
Math.abs()
для расчета абсолютного отклонения. - Array.prototype.sort() – JavaScript | MDN — информация о сортировке массивов.
- Javascript Program to Find closest number in array – GeeksforGeeks — обзорное руководство по поиску ближайшего числа и осмыслению данного подхода.
- JavaScript Arrays – W3Schools — подробный обзор о массивах в JavaScript, где представлены важные базовые знания о работе с массивами.