思路:
只使用一层循环,b[i]表示以下标i结束的数组的最大子段和,其计算方式是:
如果b[i] > 0,则b[i+1] = b[i] + a[i+1]
否则,b[i+1]=a[i]
#include <iostream>
#include <vector>
using namespace std;
int max_subsequence(vector<int>& nums)
{
int length = nums.size();
int b[length];
b[0] = nums[0];
int max = b[0];
for(int i=1; i<length; i++){
b[i] = b[i-1]>0 ? b[i-1]+nums[i] : nums[i];
if(b[i] > max) max = b[i];
}
return max;
}
int main() {
vector<int> array = {-2, 11, -4, 13, -5, -2};
cout << max_subsequence(array) << endl;
}