对于今天的算法,我们将编写一个名为 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
的变量,它将保存我们排序后的高度数组。
现在我们已经对数组进行了排序,我们使用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;
}
}