Как найти три наибольших числа в JavaScript

Подсказка

Создайте функцию, которая при вводе массива, состоящего минимум из трех целых чисел, возвращает отсортированный массив из трех наибольших целых чисел.

Примечание: вы не можете отсортировать введенный массив.

Функция должна возвращать повторяющиеся целые числа. Например: 

  • Введенный массив: -> [10, 5, 9, 10, 13].
  • Вывод: -> [10, 10, 13].

Код

Итак, мы получили подсказку и заготовку кода ниже:

Во-первых, мы можем создать переменную, которая будет отвечать за окончательный выводимый массив. На этом этапе код не может определить, какие элементы во введенном массиве являются самыми большими, поэтому мы задаем переменной нулевые значения (мы заменим эти нули на целые числа в процессе работы). 

Теперь запустим цикл for для каждого числа во введенном массиве. В цикле for мы создадим декларативный код, тем самым зададим вспомогательную функцию, которая будет создана для обработки изменения значений в массиве largeThree.

Теперь, чтобы завершить изначальную функцию, мы просто возвращаем функцию largeThree, и это будет решением.

Теперь пришло время поработать над вспомогательной функцией, чтобы завершить решение и задать логику, которая требуется для получения необходимого выводимого результата.

На этом этапе мы используем вспомогательную функцию. Эта функция должна сравнивать данные, которые в нее попадают, а затем упорядочивать их таким образом, чтобы решить задачу.

Итак, мы включим в функцию updateLargest другую вспомогательную функцию. Она упорядочит введенные целые числа и выведет правильный массив, который будет состоять из трех наибольших целых чисел. Логика будет такая:

Как показано выше, updateLargest следует изначальной логике, которая заключается в сравнении введенных данных. Мы создадим вспомогательную функцию shiftAndUpdate, чтобы она могла их упорядочить. 

Теперь приступим к работе над функцией shiftAndUpdate.

Последняя вспомогательная функция будет проходить через введенный массив. Если текущий элемент находится в позиции, которая равна заданному индексу, то ему будет присвоено значение num (ввод во вспомогательную функцию). Логика должна быть такой:

И на этом все. Окончательный код должен выглядеть следующим образом: 

Анализ сложности 

Временная сложность данного решения составляет O(n) времени, где (n)  —  это длина введенного массива. 

Пространственная сложность данного решения составляет O(1) пространства. 

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Karan S. Chauhan: Find Three Largest Numbers in JavaScript

Предыдущая статьяКак удалить одинаковые данные из отсортированного массива
Следующая статья8 главных качеств технического менеджера