CQ网络科技网站建设,广东近期新闻,vps架设好网站访问不了,陕西网站建设的目的目录
题目部分
解读与分析
代码实现 题目部分
题目找终点难度易题目说明给定一个正整数数组#xff0c;设为nums#xff0c;最大为100个成员#xff0c;求从第一个成员开始#xff0c;正好走到数组最后一个成员#xff0c;所使用的最少步骤数。 要求#xff1a; 1.第…目录
题目部分
解读与分析
代码实现 题目部分
题目找终点难度易题目说明给定一个正整数数组设为nums最大为100个成员求从第一个成员开始正好走到数组最后一个成员所使用的最少步骤数。 要求 1.第一步必须从第一元素开始且 1 第一步的步长 len/2 (说明len为数组的长度需要自行解析。) 2.从第二步开始只能以所在成员的数字走相应的步数不能多也不能少,如果目标不可达返回-1只输出最少的步骤数量。 3.只能向数组的尾部走不能往回走。输入描述由正整数组成的数组以空格分隔数组长度小于100请自行解析数据数量。输出描述正整数表示最少的步数如果不存在输出-1。补充说明补充说明------------------------------------------------------示例示例1输入7 5 9 4 2 6 8 3 5 4 3 9输出2说明第一步第一个选择步长 2从第一个成员开始走 2 步到达 9 第二步从 9 开始经过自身数字 9 对应的 9 个成员到最后。 示例2输入1 2 3 7 1 5 9 3 2 1输出-1说明无 解读与分析
题目解读
整形数组的长度为 len第一步的大小可以是 [1, len/2) 中的任意一个数字第二步和第二步以后的步数只能为当前成员的数字。
分析与思路
题目中第一步是可选的数字一旦第一步数字固定了后面的所有步数都是固定的。所以此题可变的是第一步的步数我们可以尝试第一步所有的可能的步数计算所有能到达最后的步数输出这些步数中的最小值即可。如果第一步尝试了所有可能的步数全都无法达到最后一步则输出 -1。
以上方法的时间复杂度为O()。 代码实现
Java代码
import java.util.Scanner;/*** 篮球比赛* since 2023.10.08* version 0.1* author Frank**/
public class FindEnd {public static void main(String[] args) {Scanner sc new Scanner(System.in);while (sc.hasNext()) {String input sc.nextLine();String[] numbersStr input.split( );processFindEnd( numbersStr );}}private static void processFindEnd( String numbersStr[] ){int count numbersStr.length;int[] numbers new int[count];for( int i 0; i count; i ){numbers[i] Integer.parseInt( numbersStr[i] );}int minSteps Integer.MAX_VALUE;for( int i 1; i count * 1.0 / 2; i ){int steps 1;int next i;while( next count -1 ){steps ;next next numbers[next];if( next count -1 ){if( steps minSteps ){minSteps steps;} break;}}}if( minSteps Integer.MAX_VALUE ){minSteps -1;}System.out.println( minSteps );}} JavaScript代码
const rl require(readline).createInterface({ input: process.stdin });
var iter rl[Symbol.asyncIterator]();
const readline async () (await iter.next()).value;
void async function() {while (line await readline()) {var numberArr line.split( );processFindEnd(numberArr);}
}();function processFindEnd(numbersStr) {var count numbersStr.length;var numbers new Array();for (var i 0; i count; i) {numbers[i] parseInt(numbersStr[i]);}var minSteps Number.MAX_VALUE;for (var i 1; i count / 2; i) {var steps 1;var next i;while (next count - 1) {steps;next next numbers[next];if (next count - 1) {if (steps minSteps) {minSteps steps;}break;}}}if (minSteps Number.MAX_VALUE) {minSteps -1;}console.log(minSteps);
} (完)