题解 | #牛牛的跳跃挑战#
牛牛的跳跃挑战
https://www.nowcoder.com/practice/0c99c2161c2d4a4e91ca55363cc0e059
知识点:动态规划
思路:
- 初始化数组f,长度为n+1,用于存储到达每个位置的最小能量。
- 将f[0]、f[1]和f[2]的值设为0,因为起始位置和前两个位置都不需要额外的能量。
- 使用循环从第3个位置开始遍历到第n个位置。
- 对于每个位置i,遍历位置i的前3个位置j,即从
max(0, i-3)
到i-1。 - 计算到达位置i的最小能量:f[i] = min(f[i], f[j] + height[j])。其中f[j]表示到达位置j时已经累积的能量,height[j]表示位置j需要额外的能量。
- 循环结束后,f[n]即为跳跃到最后一个位置所需的最小能量。
- 返回f[n]作为结果。
编程语言:java
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param height int整型一维数组 * @return int整型 */ private static final int INF = 1000000000; public int minEnergyJump(int[] height) { int n = height.length; int[] f = new int[n + 1]; f[0] = f[1] = f[2] = 0; for (int i = 3; i <= n; i++) { f[i] = INF; for (int j = Math.max(0, i - 3); j < i; j++) { f[i] = Math.min(f[i], f[j] + height[j]); } } return f[n]; } }