← Назад к вопросам
Как найти все самые большие числа в массиве чисел?
2.2 Middle🔥 151 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Подход к решению
Задача требует найти не одно максимальное значение, а все элементы массива, равные максимуму. Это может быть полезно, когда несколько чисел имеют одинаковое максимальное значение.
Решение с одним проходом
Оптимальный подход — один проход по массиву: сначала найти максимум, затем собрать все элементы, равные этому максимуму.
function findAllMax(numbers) {
if (numbers.length === 0) return [];
const max = Math.max(...numbers);
return numbers.filter(num => num === max);
}
// Примеры:
console.log(findAllMax([1, 5, 3, 5, 2])); // [5, 5]
console.log(findAllMax([10, 10, 10])); // [10, 10, 10]
console.log(findAllMax([7])); // [7]
Оптимизированное решение (один проход)
Если массив очень большой, лучше за один проход найти максимум и собрать элементы:
function findAllMaxOptimized(numbers) {
if (numbers.length === 0) return [];
let max = numbers[0];
let maxElements = [max];
for (let i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
maxElements = [numbers[i]];
} else if (numbers[i] === max) {
maxElements.push(numbers[i]);
}
}
return maxElements;
}
Версия с сохранением индексов
Если нужны индексы максимальных элементов:
function findMaxIndices(numbers) {
if (numbers.length === 0) return [];
const max = Math.max(...numbers);
return numbers
.map((num, index) => ({ num, index }))
.filter(item => item.num === max)
.map(item => item.index);
}
console.log(findMaxIndices([1, 5, 3, 5, 2])); // [1, 3]
Версия с объектами
Для сложных объектов:
function findAllMaxBy(items, getValue) {
if (items.length === 0) return [];
const max = Math.max(...items.map(getValue));
return items.filter(item => getValue(item) === max);
}
const users = [
{ name: "Alice", score: 85 },
{ name: "Bob", score: 92 },
{ name: "Charlie", score: 92 }
];
console.log(findAllMaxBy(users, u => u.score));
// [{ name: "Bob", score: 92 }, { name: "Charlie", score: 92 }]
Сложность и производительность
- Временная сложность: O(n) — один или два прохода
- Пространственная сложность: O(k) — где k количество максимальных элементов
Важные моменты:
Math.max()с оператором spread работает только для массивов до ~65535 элементов- Для больших массивов лучше использовать цикл
- Функция безопасна для пустых массивов и отрицательных чисел
Это стандартный подход в интервью — показывает понимание алгоритмов и умение написать чистый код.