题解 | #牛牛的跳跃挑战#
牛牛的跳跃挑战
https://www.nowcoder.com/practice/0c99c2161c2d4a4e91ca55363cc0e059
知识点:动态规划
很简单的一道动态规划问题,对于当前位置来说,可以选择前三个位置中消耗最小的位置到达。需要注意的地方是,题目所给出的数组是障碍物,也就是需要消耗的值,对于所给数组来说,若长度为n,则实际位置数为n+1,即我们需要到达的位置是n+1处,翻过最后一个障碍物所消耗的值即为答案。
Java题解如下
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param height int整型一维数组 * @return int整型 */ public int minEnergyJump (int[] height) { // write code here int n = height.length; if(n == 1) { return height[0]; }else if(n == 2) { return Math.min(height[0], height[1]); }else if(n == 3) { return Math.min(Math.min(height[0], height[1]), height[2]); } int[] dp = new int[n]; dp[0] = height[0]; dp[1] = height[1]; dp[2] = height[2]; for(int i = 3; i < n; i++) { dp[i] = height[i] + Math.min(Math.min(dp[i - 1], dp[i - 2]), dp[i - 3]); } return Math.min(Math.min(dp[n - 3], dp[n - 2]), dp[n - 1]); } }