最小步骤数 题目描述 一个正整数数组,设为nums 最大为100个成员 求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数 要求: 第一步,必须从第一元素起,且1 <= 第一步步长 < len / 2 (len为数组长度) 从第二步开始只能以所在成员的数字走相应的步数,不能多不能少,如果目标不可达返回-1,只输出最小的步骤数量 只能向数组的尾部走不能向回走 输入描述 一个正整数数组,元素用空格分割 数组长度 < 100 输出描述 正整数,最小步数 不存在输出-1 示例一 输入 7 5 9 4 2 6 8 3 5 4 3 9 输出 2 说明 第一个可选步长选择2 从第一个成员7开始走两步到9 第二步从9经过9个成员到最后 示例二 输入 1 2 3 7 1 5 9 3 2 1 输出 -1
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', (input) => {
const nums = input.split(' ').map(Number);
const len = nums.length;
// 第一步的步长范围是 1 <= step < len / 2
const firstStepMax = Math.floor((len - 1) / 2);
let minSteps = Infinity;
// 遍历所有可能的第一步
for (let firstStep = 1; firstStep <= firstStepMax; firstStep++) {
let currentIndex = firstStep;
let steps = 1;
// 开始BFS
while (currentIndex < len - 1) {
const nextStep = nums[currentIndex];
if (nextStep === 0) break; // 如果步长为0,无法继续前进
currentIndex += nextStep;
steps++;
}
// 如果到达最后一个元素,更新最小步数
if (currentIndex === len - 1) {
minSteps = Math.min(minSteps, steps);
}
}
// 输出结果
if (minSteps !== Infinity) {
console.log(minSteps);
} else {
console.log(-1);
}
rl.close();
});