大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
动态规划
题目解答方法的文字分析
这道题要求我们从一群牛中选择一个连续的子群,使得这个子群的能量值之和最大。
思路:使用动态规划来解决该问题,我们可以定义一个 dp 数组,其中 dp[i] 表示以第 i 个牛结尾的连续子群的最大能量值。我们可以根据前一个状态推导出当前状态,具体推导公式如下:
- 如果 dp[i-1] 大于 0,则 dp[i] = dp[i-1] + energy[i],表示当前子群可以和前一个子群连在一起,使能量值更大。
- 如果 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!

京公网安备 11010502036488号