Для сегодняшнего алгоритма мы напишем функцию с именем hurdleRace
, которая будет принимать целое число k
и массив height
.
Представьте, что вы соревнуетесь в беге с препятствиями, и каждое препятствие имеет разную высоту. У вас есть максимальная высота, на которой вы можете прыгать естественным образом. Вы принимаете волшебное зелье, которое поможет вам увеличить высоту прыжка на единицу за каждую дозу. Цель этой функции - увидеть, сколько доз зелья вам нужно принять, чтобы преодолеть все препятствия.
Приведем пример:
let height: [1,2,3,3,2]; let k = 2;
Для нашей переменной height
у нас есть список препятствий с высотой, которую вы должны перепрыгнуть.
Наша переменная k
показывает максимальную высоту, на которую мы можем прыгнуть.
Если вы посмотрите на массив, 3 - это наша максимальная высота. Если мы вычтем наибольшее значение, которое мы можем перепрыгнуть, из наибольшего числа в массиве, 3 — 2 = 1
мы получим количество доз зелья, которое мы можем потребить, чтобы преодолеть все препятствия. В этом примере нам нужна только 1 доза.
Если наша k
, максимальная высота, которую мы можем естественно перепрыгнуть, больше или равна самому высокому препятствию в массиве, мы выводим 0
.
Давайте превратим это в код:
let heightSort = height.sort(function(a, b) { return a - b; });
Мы создаем переменную с именем heightSort
, и она будет содержать отсортированный массив height
. Мы используем метод sort вместе со вспомогательной функцией для сортировки массива. Чтобы узнать больше о методе сортировки и вспомогательных функциях, вы можете прочитать об этом в этом алгоритме, где я впервые его использовал:
Теперь, когда у нас есть отсортированный массив, мы используем оператор if для сравнения наибольшего числа в массиве с нашей максимальной естественной высотой прыжка k
:
if(heightSort[heightSort.length -1] > k){ return heightSort[heightSort.length -1] - k; }else{ return 0; }
Поскольку мы отсортировали наш массив, массив высот отсортирован от наименьшего к наибольшему. Наибольшее значение будет последним числом в массиве. Чтобы получить последний элемент в массиве, мы используем следующее:
arrayName[arrayName.length - 1];
Индексом будет длина массива минус один (в массивах используется нумерация с нуля).
В условном выражении нашего оператора if мы проверяем, не превышает ли максимальная высота препятствия максимальную высоту, которую мы можем перепрыгнуть. Если это так, вычтите максимальную высоту препятствия из нашей максимальной естественной высоты прыжка и верните ответ. Если нет, верните 0.
На этом наш алгоритм завершен. Вот полный код:
function hurdleRace(k, height) { let heightSort = height.sort(function(a, b) { return a - b; }); if(heightSort[heightSort.length -1] > k){ return heightSort[heightSort.length -1] - k; }else{ return 0; } }
Вот несколько недавних статей об алгоритмах JavaScript, которые вы можете проверить: