• 求整数数组中和最大的子数组的和


    郑云飞--韩亚华 

     这个问题的复杂性和不确定让我们让我们想到了枚举,求出每一个子数组的和,但这样我们我们程序的时间复杂度

    将会非常高,于是我们想把办法简化它。首先我们将数组里连续的正数和负数就和,这样我们将得到一个正负相间的

    整数数组。然后再对正整数数组求最大子数组,这样最大子数组必定是两头为正,有奇数个元素的数组,让后再对这

    样的数组枚举。这样不能在数量级简化时间复杂度,但也会使计算得到一定简化。一下会方法:

    int maxsubarray(int a[],int n)
    {
        int *temp;
        int newlong=0;
        int k=1;//标志新数组元素的正负
        int t=0;
        int e=n;
        int max=0;
        int add=0;
        while(a[t]<=0)
        {
            t++;
        }
        while(a[e-1]<=0)
        {
            e--;
        }
        temp=new int[n];
        for(int j=0;j<n;j++)
        {
            temp[j]=0;
        }
        for(int i=t;i<e;i++)
        {
            if(k==1)
            {
                if(a[i]>0)
                    temp[newlong]=temp[newlong]+a[i];
                else
                {
                    k=-1;
                    newlong++;
                }
            }
            if(k==-1)
            {
                if(a[i]<=0)
                    temp[newlong]=temp[newlong]+a[i];
                else
                {
                    k=1;
                    newlong++;
                    i--;
                }
            }
    
        }//得到新数组
        /*for(int x=0;x<=newlong;x++)
        {
            cout<<temp[x]<<" ";
        }*/
        for(int element=1;element<=newlong+1;element=element+2)//对新数组枚举
        {
            for(int start=0;start<=newlong+1-element;start=start+2)
            {
                for(int i=0;i<element;i++)
                {
                    add=add+temp[start+i];
                }
                if(max<add)
                {
                    max=add;
                }
                add=0;
    
            }
        }
        return max;
    
    }
    测试函数:
    int main()
    {
        int a[10]={2,4,6,-2,-78,9,8,-1,9,-3};
        int themax;
        themax=maxsubarray(a,10);
        cout<<themax;
    }
  • 相关阅读:
    C# 杂活
    常用 SQL Server 规范集锦
    C# 文件操作
    使用Git 本地代码提交到 GitHub
    Numpy的小总结
    C#最佳工具集合:IDE、分析、自动化工具等
    Web服务器、应用服务器、Web容器、反向代理服务器区别与联系
    Platt SMO 和遗传算法优化 SVM
    Pycharm配置(三)
    Pycharm配置(二)
  • 原文地址:https://www.cnblogs.com/812969272zheng/p/3592910.html
Copyright © 2020-2023  润新知