真题2023

209 阅读1分钟

【找终点】 给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。
要求:
第一步必须从第一元素开始,且1 <= 第一步步长 < len/2,len为数组的长度,需自行解析;
第二步开始,只能以所在成员的数字走相应的步数,不能多也不能少,如果目标不可达返回-1,只输出最少的步骤数量;
只能向数组的尾部走,不能往回走; 输入描述:由正整数组成的数组,以空格分隔,数组长度小于100,请自行解析数据数量。
输出描述:正整数,表示最少的步数,如果不存在输出-1。
输入:4 2 9 5 3 8 1 5 5 2 2 1 9
输出:3


/*** 求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。*/
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;
}