题目考察的知识点:动态规划
题目解答方法的文字分析:最大子序列和如果在中间区域,那么就是找最大子序列和;最大子序列如果在末端和前端之和,这种情况不好找最大;但是可以找出数组的最小子序列和,然后用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); } };