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

题目考察的知识点

动态规划

题目解答方法的文字分析

这道题要求我们从一群牛中选择一个连续的子群,使得这个子群的能量值之和最大。

思路:使用动态规划来解决该问题,我们可以定义一个 dp 数组,其中 dp[i] 表示以第 i 个牛结尾的连续子群的最大能量值。我们可以根据前一个状态推导出当前状态,具体推导公式如下:

  1. 如果 dp[i-1] 大于 0,则 dp[i] = dp[i-1] + energy[i],表示当前子群可以和前一个子群连在一起,使能量值更大。
  2. 如果 dp[i-1] 小于等于 0,则 dp[i] = energy[i],表示当前子群从第 i 个牛开始。

最后,我们只需要遍历 dp 数组,找到其中的最大值,即为最大能量值之和。

本题解析所用的编程语言

C++

完整且正确的编程代码

class Solution {
public:
    int maxEnergy(vector<int>& energy) {
        int n = energy.size();
        if (n == 0) {
            return 0;
        }

        vector<int> dp(n, 0); // dp数组,dp[i]表示以第i个牛结尾的连续子群的最大能量值
        dp[0] = energy[0];
        int maxEnergyValue = dp[0]; // 最大能量值之和

        for (int i = 1; i < n; ++i) {
            dp[i] = max(dp[i - 1] + energy[i], energy[i]);
            maxEnergyValue = max(maxEnergyValue, dp[i]);
        }

        return maxEnergyValue;
    }
};

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