← Назад к вопросам

Как найти все самые большие числа в массиве чисел?

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 элементов
  • Для больших массивов лучше использовать цикл
  • Функция безопасна для пустых массивов и отрицательных чисел

Это стандартный подход в интервью — показывает понимание алгоритмов и умение написать чистый код.

Как найти все самые большие числа в массиве чисел? | PrepBro