题解 | #牛群迁徙# java
牛群迁徙
https://www.nowcoder.com/practice/686d79ac54874f5f8abbb83184102873
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[] dp = new int[n]; // 用于记录每个位置的最小跳跃次数 Arrays.fill(dp, Integer.MAX_VALUE); // 初始化为最大值 dp[0] = 0; // 初始位置的最小跳跃次数为0 for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (j + rivers[j] >= i) { dp[i] = Math.min(dp[i], dp[j] + 1); } } } return dp[n - 1]; } }
Java 编程语言。
该题考察了以下知识点:
- 动态规划
- 嵌套循环
- 数组填充和更新
代码的文字解释如下:
- 创建一个长度为 n 的整数数组
dp
,用于记录每个位置的最小跳跃次数。 - 将
dp
数组的所有元素初始化为最大值,表示初始情况下无法达到。 - 将初始位置的最小跳跃次数
dp[0]
设置为 0,因为不需要跳跃即可到达。 - 使用两个嵌套循环,外层循环遍历从第二个位置到最后一个位置的每个位置。
- 内层循环遍历从第一个位置到当前位置的每个位置,检查是否能够通过跳跃到达当前位置。
- 如果能够到达当前位置,则更新
dp[i]
为之前位置的最小跳跃次数加上 1。 - 返回
dp[n - 1]
,即牧人从初始位置到达 rivers[n - 1] 需要的最小跳跃次数。