import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param rivers int整型一维数组
* @return int整型
*/
public int min_jumps (int[] rivers) {
// write code here
int n = rivers.length;
int[] jumps = new int[n]; // 存储到达每个位置所需的最小跳跃次数
Arrays.fill(jumps,
Integer.MAX_VALUE); // 用一个较大的值初始化跳跃次数数组
jumps[0] = 0; // 起始位置不需要跳跃
for (int i = 0; i < n; i++) {
for (int j = 1; j <= rivers[i] && i + j < n; j++) {
// 更新可到达位置的最小跳跃次数
jumps[i + j] = Math.min(jumps[i + j], jumps[i] + 1);
}
}
return jumps[n -
1]; // 返回到达最后一条河流所需的最小跳跃次数
}
}
Java代码。
考察的主要知识点包括:
- 动态规划
- 数组操作
以下是代码的文字解释:
min_jumps函数接受一个整数数组rivers作为参数,表示每个河流边缘向前跳跃的最大长度。- 创建一个长度为
n的整数数组jumps,用于存储到达每个位置所需的最小跳跃次数。 - 使用
Arrays.fill初始化jumps数组,将其所有元素初始化为一个较大的值(Integer.MAX_VALUE),表示初始状态下无穷大的跳跃次数。 - 将起始位置
jumps[0]设置为 0,因为不需要跳跃来到起始位置。 - 使用嵌套循环迭代处理每个位置
i,以及在rivers[i]范围内可跳跃的步数j。 - 在内层循环中,根据当前位置
i和可跳跃的步数j,更新跳跃到达的位置i + j所需的最小跳跃次数,将其更新为jumps[i] + 1和当前位置i + j位置上的最小跳跃次数的较小值。 - 返回
jumps[n - 1],表示到达最后一条河流所需的最小跳跃次数。

京公网安备 11010502036488号