最大字段和,常規解法有四種,分別是:
1、三重for循環;
2、兩重for循環;
3、分治解法;
4、動態規劃;
從時間複雜度的角度講,動態規劃是最優算法,故對其簡單介紹:
#include<iostream>
using namespace std;
int maxIntervalSum(int n,int a[]) //動態規劃求最大子段和,O(n)
{
int max=a[0];
int f[100];
for(int i=1;i<n;i++)
{
if(f[i-1]>0)
{
f[i]=f[i-1]+a[i];
}
else
{
f[i]=a[i];
}
if(f[i]>max)
{
max=f[i];
}
}
return max;
}
int main()
{
int a[]={1,-3,5,-1,-2,-1,9,-6,4};
cout<<maxIntervalSum(sizeof(a)/sizeof(int),a)<<endl;
return 0;
}