zoukankan      html  css  js  c++  java
  • 求整数数组中和最大的子数组的和

    郑云飞--韩亚华 

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

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

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

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

    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;
    }
  • 相关阅读:
    201621123028《Java程序设计》第二周学习总结
    tensorflow——乘法
    最近做的事儿
    BlurUse Compute Shader
    又翻出来老电视剧看了看....
    exercise: toon shader
    semantic SV_
    SimpleDateFormat使用详解
    各种数字类型转换成字符串型:
    android 代码混淆配置
  • 原文地址:https://www.cnblogs.com/812969272zheng/p/3592910.html
Copyright © 2011-2022 走看看