问题描述
输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:
序列:-2 11 -4 13 -5 -2,则最大子序列和为20。
#include <iostream>
#include <assert.h>
#include <vector>
#define Max(a,b) (a)>(b)?(a):(b)
using namespace std;
//最大子序和问题
int main(void)
{
int data[6] = { -2, 11, - 4, 13, - 5, - 2 };
int max = data[0];//最大子序和
int serialSum = data[0];//当前序列和,不能初始化为0,因为data里面的元素可能全为负值
//如果当前元素加上seraialSum大于0,则记录下该值赋给serialSum。
//比较serialSum和max最大值赋给max
for (int i = 0; i < 6; i++)
{
int tmp = data[i] + serialSum;
if (tmp > 0)
{
serialSum = tmp;
}
max = Max(serialSum, max);
}
cout << max;
return 0;
}