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

牛牛的跳跃挑战

https://www.nowcoder.com/practice/0c99c2161c2d4a4e91ca55363cc0e059

大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

动态规划

题目解答方法的文字分析

这道题目要求计算跳跃过所有障碍物的最低能量值,但跳跃本身不消耗能量。牛牛可以选择从下标为0、1或2的障碍物开始跳跃,每次可以选择跳过一个、两个或三个障碍物。

为了解决这个问题,我们可以使用动态规划来计算从每个障碍物开始跳跃所需的最低能量值。首先,我们需要初始化一个一维数组 dp,其中 dp[i] 表示从第i个障碍物开始跳跃所需的最低能量值。

然后,我们从前往后遍历障碍物,计算 dp[i] 的值。对于每个障碍物i,我们可以选择跳过一个、两个或三个障碍物,但跳跃本身不消耗能量,所以只需要累加上障碍物i的高度即可。我们选择这三种情况中能量值最小的作为 dp[i] 的值。

最后,我们返回 dp[n-1],即从下标为n-1的障碍物开始跳跃所需的最低能量值。

本题解析所用的编程语言

C++

完整且正确的编程代码

#include <vector>
#include <algorithm>

using namespace std;

class Solution {
public:
    int minEnergyJump(vector<int>& height) {
        int n = height.size();
        vector<int> dp(n);

        // 初始化前三个障碍物的能量值为其高度
        dp[0] = height[0];
        dp[1] = height[1];
        dp[2] = height[2];

        for (int i = 3; i < n; i++) {
            // 计算从第i个障碍物开始跳跃的最低能量值,只需要累加上障碍物i的高度即可
            dp[i] = min(dp[i - 1], min(dp[i - 2], dp[i - 3])) + height[i];
        }

        // 返回从下标为n-1的障碍物开始跳跃的最低能量值
        return min(dp[n - 1], min(dp[n - 2], dp[n - 3]));
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!

阿Q的题解 文章被收录于专栏

阿Q秋招刷过的题

全部评论

相关推荐

LXXXXd:有点杂,想搞自动化的话没必要把法律的经历写上去
点赞 评论 收藏
分享
11-17 23:00
南昌大学 Java
我要娶个什么名:10元一天 0元提成😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务