华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一个正整数数组 设为nums,最大为100个成员,求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。
要求:
有正整数数组空格分割,数组长度<100。
正整数 最小步数,不存在输出-1。
题目要求计算从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。
步骤要求如下:
具体解题思路如下:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] nums = scanner.nextLine().split(" ");
int len = nums.length;
int[] arr = new int[len];
for (int i = 0; i < len; i++) {
arr[i] = Integer.parseInt(nums[i]);
}
int minCount = 0;
// 第1步最多只能走 len/2,遍历各种情况
for (int i = 1; i < len / 2; i++) {
// 走出第一步后的步数和位置
int count = 1;
int index = i;
// 从第2步开始只能以所在成员的数字走相应的步数
while (true) {
// 再走一步
index += arr[index];
// 步数加1
count++;
if (index > len - 1) {
// 当走的长度超出了范围,说明这种情况不符合要求
break;
} else if (index == len - 1) {
// 刚好走到最后一个成员,更新最小步数
if (minCount == 0) {
minCount = count;
} else {
minCount = Math.min(minCount, count);
}
break;
}
}
}
if (minCount == 0) {
System.out.println(-1);
} else {
System.out.println(minCount);
}
}
下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。