算法复习笔记之重要算法(二)

算法复习笔记之重要算法(二)

目录:

   

1.1编写算法求最大子序列和:

详细题目以及要求见:acm.hdu.edu.cn/showproblem.php?pid=1003

1.1.1枚举法 时间复杂度为n的平方,超时

int max(int a[],int n)
{
    int i,j,maxsum=0,m; 
    for(i=0;i<n;i++)
    {
        m=0;
        for(j=i;j<n;j++)
        {
            m=m+a[j];
            if(m>maxsum) maxsum=m;
        }
    }
    return maxsum;
}

1.1.2

    分治法

int maxsum(int a[],int left,int right)
{  
    int maxleft,maxright,mid,leftsum=0,rightsum=0;    
    int maxlefttmp=0,maxrighttmp=0;
    if(left==right)
        return a[left]>0?a[left]:0
    mid=(left+roght)/2;
    maxleft=maxsum(a,left,mid);//left part max sum
    maxright=maxsum(a,mid+1,right);//right part max sum
    for(int i=mid;i>=left;i--)
       {
            leftsum+=a[i];
            if(leftsum>maxlefttmp)
                maxlefttmp=leftsum;
        }
    for(int i=mid+1;i<=right;i++)
       {
            rightsum+=a[i];
            if(rightsum>maxrighttmp)
                maxrighttmp=rightsum;
        }
return max(maxleft,maxright,maxlefttmp+maxrighttmp);
}

qaq >_> 估计 目测 还是会爆 时间复杂度为nlogn


1.1.3 dp,复杂度为O(n)

int max(int a[],int n)
{
    int i,maxsum=0,m=0;
    for(i=0;i<n;i++)
    {
            m=m+a[i];
         if(m>maxsum)
            maxsum=m;
        else if(m<0)
            m=0;
    }
    return maxsum;
 }
短小精悍 嘻嘻 哈哈哈

猜你喜欢

转载自blog.csdn.net/qq_37457202/article/details/80434861