题解 | #牛牛的跳跃挑战#

牛牛的跳跃挑战

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]);
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务