问题:连续子序列最大和
给定一个数字序列[A1A2A3…An],求i,j(1<=i<=j<=n)使得Ai…Aj和最大,
输出这个最大和(连续大子序列最大和)
例如:
输入:
L=[-2 ,6, -1, 5, 4, -7, 2, 3]
输出:
14 (即6,-1,5,4这个序列的和)
方法一:暴力法(O(n^3))
int fun(int *a,int n)
{
int t=0;
int ans=-99999;
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
for(int k=i;k<=j;k++)\\求子序列的和
{
t+=a[k];
}
if(ans<t)
ans=t;
t=0;
}
}
return ans;
}
方法二:暴力法优化(O(n^2))
原理:利用数列和S_n=S_(n-1)+a_n
int fun(int *a,int n)
{
int t=0;
int ans=-99999;
for(int i=0;i<n;i++)
{
t=0;
for(int j=i;j<n;j++)
{
t+=a[j];
if(ans<t)
ans=t;
}
}
return ans;
}
注:目前只会简单的暴力,后面学了贪心或递归后会再更新