Алгоритмы: Поиск min/max число в массиве.

Выполнение задачи по поиску минимального и максимального значения будет на JavaScript в нескольких вариантах с примерной оценкой Big O Notation. Исходные данные — массив содержит только числовые значения.

Базовый вариант использование Math объекта

Во многих ЯП есть методы, которые решают похожую задачу. В JavaScript это объект Math и методы min/max, которые позволяют найти минимальные или максимальное число в передаваемых атрибутах. Для массива будет достаточно использовать оператор spread и получиться вот так:

const collection = [2, 6, 3, 1];
console.log(Math.min(...collection)); // 1
console.log(Math.max(...collection)); // 6

Сложность алгоритма ~ O(1)

Использование метода Reduce

Отличный способ понять работу reduce, это применить его в этой задаче. у Reduce важная фича, это запоминание на каждой итерации прошлое возвращаемое значение и это пригодится для нахождение минимального или максимального значения в массиве:

const collection = [5, 66, 14];
const getMinValue = (arr) => arr.reduce((prev, current) => {
    return Math.min(prev, current); // вместо Math, можно тернарным оператором сравнить и вернуть большее число.
});
console.log(getMinValue(collection)) // Результат: 5

Сложность алгоритма ~ O(n)

Обычное решение через цикл for

Без оператора spread, самым очевидным решением было бы — просто использование цикла for который будет являться и самым производительным решением в случае сотен тысяч или миллионов элементов.

function getMinValue(arr) {
	let firstElement = arr[0];
	for (let i = 1; i < arr.length; ++i) {
	    if (arr[i] < firstElement) {
	        firstElement = arr[i];
	    }
	}

	return firstElement;
}

const collection = [33, 2, 2, 24, 4, 5, 5, 8];
console.log(getMinValue(collection)); // Результат: 2

В случае нахождение максимального элемента, меняется сравнение в условии if в обратную сторону. Сложность алгоритма ~ O(n).

Читайте также
15 сайтов, чтобы сэкономить время CSS-разработчику
15 сайтов, чтобы сэкономить время CSS-разработчику
15 сайтов, чтобы сэкономить время CSS-разработчику

Собрали 15 сайтов, которые помогут сэкономить много времени и расширить опыт разработки CSS.

Опубликовали релиз языка программирования ReScript 11.0
Опубликовали релиз языка программирования ReScript 11.0
Опубликовали релиз языка программирования ReScript 11.0

В версии 11 ReScript появились новые возможности для более эффективной работы с JavaScript/TypeScript, в том числе настраиваемое представление вариантов во время выполнения, привязки без дополнительных затрат к дискриминированным объединениям и небоксированные варианты, упрощающие работу с гетерогенными массивами и значениями, которые могут быть нулевыми.

Dev новости:  Nuxt 3.9, Vue.js 3.4, анализируем React Server Components
Dev новости: Nuxt 3.9, Vue.js 3.4, анализируем React Server Components
Dev новости: Nuxt 3.9, Vue.js 3.4, анализируем React Server Components

Улучшения в Vue.js, анонс новых фич для версии 3.9 в Nuxt. Bun, Copilot и небольшой анализ react серверных компонентов.

18 репозиториев GitHub, которые должен знать каждый разработчик
18 репозиториев GitHub, которые должен знать каждый разработчик
18 репозиториев GitHub, которые должен знать каждый разработчик

Рассказываем о 18 репозиториях GitHub, которые обязательно нужно занести в закладки. Они помогут вам на пути к кодингу.