题解 | #牛牛的跳跃挑战#
牛牛的跳跃挑战
https://www.nowcoder.com/practice/0c99c2161c2d4a4e91ca55363cc0e059
- 题目考察的知识点 : 动态规划
- 题目解答方法的文字分析:
- 可以定义一个一维数组 dp,其中 dp[i] 表示从第 i 个障碍物起跳到终点所需的最小能量值。对于每个位置 i,dp[i] 可以由 dp[i+1]、dp[i+2] 和 dp[i+3] 推导出来,分别表示跳过下一个、下两个或下三个障碍物。因为牛牛可以选择从前三个障碍物中的任意一个开始跳跃,所以我们还需要考虑前三个元素的值。
- 最终答案即为 dp[0],因为我们可以选择从第一个或第二个或第三个障碍物开始跳跃。注意到如果从第一个障碍物开始跳跃,则需要消耗其本身的高度作为能量值,即 dp[0] = height[0] + min(dp[1], dp[2], dp[3])。
- 本题解析所用的编程语言: Python
- 完整且正确的编程代码
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param height int整型一维数组 # @return int整型 # class Solution: def minEnergyJump(self, height: List[int]) -> int: n = len(height) dp = [0] * (n + 3) # 前三个元素用于处理边界情况 for i in range(n - 1, -1, -1): dp[i] = height[i] + min(dp[i + 1], dp[i + 2], dp[i + 3]) return min(dp[0], dp[1], dp[2]) # 取三个起点中的最小值
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路