題目:輸入一個整形數組,數組裏有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間複雜度爲O(n)。
例如
輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,因此輸出爲該子數組的和18。
//
#include<iostream>
using namespace std;
int maxsum(int *a,int n)
{
int b=0;
int sum=0;
int c=a[0];
for(int i=1;i<n;i++)
{
if(a[i]>c)
c=a[i];
}
if(c<0)
return c;
for(int i=0;i<n;i++)
{
if(b<0)
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
}
int main()
{
int a[8]={1,-2,3,10,-4,7,2,-5};
cout<<maxsum(a,8)<<endl;
}