描述
牛牛要参加跳跃挑战赛,挑战场地上有若干个障碍物,每个障碍物上都有一个高度,表示跳过该障碍物需要的最小能量值。一旦使用了能量值,牛牛可以选择跳过一个或两个或三个障碍物。动物牛可以选择从下标为 0 或下标为 1 或者下标2的障碍物开始跳跃。请你计算并返回跳过所有障碍物的最低能量值。
示例1
输入:[2,5,6,8,9]
返回值:6
示例2
输入:[1,3,2,4,6]
返回值:2
示例3
输入:[3, 2, 1, 4, 5, 6, 7]
返回值:6
备注:
3 <= height.length <= 1000
1 <= height[i] <= 1000
知识点
动态规划
解题思路
定义一个一维数组dp,dp[i]表示从起点跳到第i个障碍物时所需的最低能量值。当i小于3时,所需的能量值为height[i],当i大于等于3后,所需的能量值就为前面三次能量值的最低值加上当前height[i]的能量值。最后取最后三次跳跃中的能量最小值。
Java题解
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];
for (int i = 0; i < n; i++) {
if(i < 3){
dp[i] = height[i];
} else {
dp[i] = Math.min(dp[i - 1], Math.min(dp[i - 2], dp[i - 3])) + height[i];
}
}
return Math.min(dp[n - 1],Math.min(dp[n - 2],dp[n - 3]));
}
}