Java 题解 | #牛牛的跳跃挑战#
牛牛的跳跃挑战
https://www.nowcoder.com/practice/0c99c2161c2d4a4e91ca55363cc0e059
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param height int整型一维数组 * @return int整型 */ public int minEnergyJump (int[] height) { // write code here int n = height.length; int[] dp = new int[n]; // 初始化前三个障碍物的能量值为其高度 dp[0] = height[0]; dp[1] = height[1]; dp[2] = height[2]; for (int i = 3; i < n; i++) { // 计算从第i个障碍物开始跳跃的最低能量值,只需要累加上障碍物i的高度即可 dp[i] = Math.min(dp[i - 1], Math.min(dp[i - 2], dp[i - 3])) + height[i]; } // 返回从下标为n-1的障碍物开始跳跃的最低能量值 return Math.min(dp[n - 1], Math.min(dp[n - 2], dp[n - 3])); } }
编程语言是Java。
该题考察动态规划
文字解释:通过动态规划的方式,逐步累加每个障碍物的高度,以获得最低能量值。最终,返回从倒数三个障碍物开始跳跃的最低能量值作为结果。
使用循环从第三个障碍物开始遍历数组,在每个位置 i,计算从当前位置开始跳跃的最低能量值,该值是从前三个位置的最小能量值中选择一个,并加上当前障碍物的高度。从最后三个位置中选择一个能量值的最小值作为结果返回