大致思路:
例如:9 0 -2 7
sum一直加,如果sum不小于0,就一直往后加,得到答案14
例如 9 -13 4 7
sum加到-13时,sum=-4,再往后加的话,只会让后面的数变小,所以就将4赋值给sum,继续往后加,得到答案为11
最大子段和的加深练习:http://blog.youkuaiyun.com/hh__01/article/details/49205395
#include <iostream>
using namespace std;
int data[101];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> data[i];
}
int sum = 0;
int max = -9999999;
for (int i = 0; i < n; i++)
{
//如果之前加的数的和为负数,则把sum赋值为当前的数的值,因为加上去的话只会使现在数的值变小
if (sum < 0)
{
sum = data[i];
}
else
{
sum += data[i];
}
if (max < sum)//记录每个子段的最大值,保存下来
{
max = sum;
}
}
cout << max << endl;
return 0;
}