给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。
要求:
由正整数组成的数组,以空格分隔,数组长度小于100,请自行解析数据数量。
正整数,表示最少的步数,如果不存在输出-1。
4 2 9 5 3 8 1 5 5 7 2 6 9
;/**
* 求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。
*/
function calculate(nums) {
const len = nums.length;
// 最少步骤数,最大为100个成员
let minSteps = Infinity;
// 第一步的步长 < len/2
for (let i = 0; i < Math.floor(len / 2); i++) {
let index = i;
let stepCount = 1;
// 比如第一步为数字4,前进4步,到达nums[4],即为3,再走3步,到达nums[7],即为5,再走5步,正好到达最后一个数字9
while (index < len - 1) {
index += nums[index];
stepCount++;
}
// 判断最后一次的下角标是否等于最后一个,如果等于,则符合要求
if (index === len - 1) {
minSteps = Math.min(minSteps, stepCount);
}
}
// 输出使用的最少步骤数,如果没有,输出-1
return minSteps === Infinity ? -1 : minSteps;
}
4 2 9 5 3 8 1 5 5 2 2 1 9
3
比如走0步,值为4,前进4步,到达nums[4],即为3,再走3步,到达nums[7],即为5,再走5步,正好到达最后一个数字9,花费4步。
比如走1步,值为2,前进2步,到达nums[9],即为1,再走1步,正好到达最后一个数字9,花费3步。
比如走3步,值为5,前进5步,到达nums[8],即为5,再走5步,正好到达最后一个数字9,花费3步。
取符合要求的最小步数,所以输出3。
下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。