/*
求子数组的最大和
题目
输入一个整型数组,数组里有正数也有负数。
数组中连续的一个或者多个数组组成一个子数组,每个子数组都要一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n).
*/
#include <iostream>
using namespace std;
#define N 100
int n;
int value[N];
int MaxSum(int n, int * a)
{
int sum = 0;
int b = 0;
for(int i=0; i<n; i++)
{
if (b < 0)
{
b = a[i];
}
else
{
b += a[i];
}
if (b > sum)
{
sum = b;
}
}
return sum;
}
int main()
{
while(scanf("%d", &n)!=EOF)
{
for(int i=0; i<n; i++)
{
cin >> value[i];
}
cout <<"最大子数组和为:"<< MaxSum(n, value) << endl;
}
}
7 1 -2 3 10 -15 7 2
最大子数组和为:13
*/
求子数组的最大和
题目
输入一个整型数组,数组里有正数也有负数。
数组中连续的一个或者多个数组组成一个子数组,每个子数组都要一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n).
*/
#include <iostream>
using namespace std;
#define N 100
int n;
int value[N];
int MaxSum(int n, int * a)
{
int sum = 0;
int b = 0;
for(int i=0; i<n; i++)
{
if (b < 0)
{
b = a[i];
}
else
{
b += a[i];
}
if (b > sum)
{
sum = b;
}
}
return sum;
}
int main()
{
while(scanf("%d", &n)!=EOF)
{
for(int i=0; i<n; i++)
{
cin >> value[i];
}
cout <<"最大子数组和为:"<< MaxSum(n, value) << endl;
}
}
这个还没有考虑数组所有的数都是负数的情况、
7 1 -2 3 10 -15 7 2
最大子数组和为:13
*/