连续子数组的最大和

来源:互联网 发布:淘宝小店推广 编辑:程序博客网 时间:2024/06/08 16:30

输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间负责度为O(n)。
基本思想:
令:
f(n)表示以下标n结束的最大子序列和;
num表示整形数组;

f(n)=

num[i],f(n1)+num[i]f(n-1)<0||n==0others

int findMaxSum(int* num,int length){    int* f=new int[length];    int maxSum=-INT_MAX;    int start=0,end=0,tmp=0;    for(int i=0;i<length;i++)    {        if(i==0||f[i-1]<0)        {            f[i]=num[i];            tmp=i;        }        else            f[i]=f[i-1]+num[i];        if(f[i]>maxSum)        {            maxSum=f[i];            start=tmp;            end=i;        }    }    return maxSum;}
0 0