程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

连续子数组的最大和(连续子数组的最大和java)

balukai 2025-03-24 14:04:15 文章精选 7 ℃

连续子数组的最大和

输入一个数组,数组里有正数,负数。数组中有一个或多个连续的整数组成一个子数组,求子数组的最大值。

思路:
动态规划,定义函数f(i)表示以第i个数字结尾的子数组的最大和,那么我们需要求出max[f(i)],其中
0 <= i < n。递推公式:

f(i) = pdata[i] i=0 or f(i-1)<0 f(i) = f(i-1)+pdata[i] i>0 and f(i-1)>0

参考代码:

root@gt:/home/git/Code# ./a.out 
18
root@gt:/home/git/Code# cat maxdp.c 
#include 

int dp(int* pdata,int len)
{
    if(pdata == NULL || len <= 0)
        return 0;
    int f = pdata[0];
    int max = 0;
    for(int i = 1;i < len;++i)
    {
        if(f <= 0)
        {
            f = pdata[i];
            max = 0;
        }
        else
        {
            if(max < f)
                max = f;
            f += pdata[i];
        }
    }
    return max;
}

int main()
{
    int pdata[] = {1,-2,3,10,-4,7,2,-5};
    int res = dp(pdata,sizeof(pdata));
    printf("%d\n",res);
    return 0;
}

最近发表
标签列表