题目考察的知识点:动态规划
题目解答方法的文字分析:最大子序列和如果在中间区域,那么就是找最大子序列和;最大子序列如果在末端和前端之和,这种情况不好找最大;但是可以找出数组的最小子序列和,然后用sum减最小子序列和就是最大子序列和。
本题解析所用的编程语言:c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param energy int整型vector
* @return int整型
*/
int maxEnergyCircular(vector<int>& energy)
{
// write code here
int fmax = 0, gmin = 0;
int x = energy[0], y = energy[0], sum = energy[0];
for (int i = 1; i < energy.size(); ++i)
{
fmax = max(energy[i], fmax + energy[i]);
if (fmax > x)
x = fmax;
gmin = min(energy[i], gmin + energy[i]);
if (gmin < y)
y = gmin;
sum += energy[i];
}
sum -= y;
return max(sum, x);
}
};

京公网安备 11010502036488号