题解 | #牛群迁徙# 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[] 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]
,表示到达最后一条河流所需的最小跳跃次数。