网站建设飠金手指排名十五,传奇网页游戏网,众筹wordpress模板,宁波网站设计价格一、题目描述
给定一个正整数数组#xff0c;设为nums#xff0c;最大为100个成员#xff0c;求从第一个成员开始#xff0c;正好走到数组最后一个成员#xff0c;所使用的最少步骤数。
要求#xff1a;
第一步必须从第一元素开始#xff0c;且1 第一步的步长 设为nums最大为100个成员求从第一个成员开始正好走到数组最后一个成员所使用的最少步骤数。
要求
第一步必须从第一元素开始且1 第一步的步长 len/2len为数组的长度需要自行解析第二步开始只能以所在成员的数字走相应的步数不能多也不能少如果目标不可达返回-1只输出最少的步骤数量只能向数组的尾部走不能往回走
二、输入描述
由正整数组成的数组以空格分隔数组长度小于100请自行解析数据数量。
三、输出描述
正整数表示最少的步数如果不存在输出-1。
四、解题思路
给定一个正整数数组设为nums遍历nums根据题目描述“第一步的步长 len/2”因为从0开始所以循环到nums.length / 2 - 1根据当前index的值再走n步循环往复 比如测试的输入4 2 9 5 3 8 1 5 5 7 2 6 9第一步为数字4前进4步到达nums[4]即为3再走3步到达nums[7]即为5再走5步正好到达最后一个数字9完美 判断最后一次的下角标是否等于最后一个如果等于则符合要求取符合要求的最小步骤数输出使用的最少步骤数如果没有输出-1。
五、JavaScript算法源码
/*** 求从第一个成员开始正好走到数组最后一个成员所使用的最少步骤数。*/
function calculate(nums) {const len nums.length;// 最少步骤数最大为100个成员let minSteps Infinity;// 第一步的步长 len/2for (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步正好到达最后一个数字9while (index len - 1) {index nums[index];stepCount;}// 判断最后一次的下角标是否等于最后一个如果等于则符合要求if (index len - 1) {minSteps Math.min(minSteps, stepCount);}}// 输出使用的最少步骤数如果没有输出-1return minSteps Infinity ? -1 : minSteps;
}六、效果展示
1、输入
4 2 9 5 3 8 1 5 5 2 2 1 9
2、输出
3
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在线答疑。