zoukankan      html  css  js  c++  java
  • 数组的子数组之和的最大值

    #include<iostream>
    using namespace std;
    
    //method1 
    /*
     使用穷举的方法穷举出所有可能的子数组之和,然后从中找出最大值。由于使用三重循环故时间复杂度为O(N^3)
    */
    int MaxSum(int* A,int n)
    {
     int maximum=A[0];//maximum初始化为A[0]
     int sum;
        for(int i=0;i<n;i++)
      for(int j=i;j<n;j++)
      {
       sum=0;
          for(int k=i;k<=j;k++)
       {
            sum+=A[k];
       }
       if(sum>maximum)
       {
           maximum=sum;
       }
      }
      return maximum;
    }
    
    //method2
    /*
    在方案一中第三重循环求位置i到位置j之间的值的和,如果注意到sum[i,...,j]=sum[i,...j-1]+A[j];
    则可以将算法中的最后一个for循环省略,避免重复计算,从而使算法得以改进,改进后的算法如下,这时
    时间复杂度为O(N^2)
    */
    int MaxSum2(int* A,int n)
    {
      int maximum=A[0];
      int sum;
      for(int i=0;i<n;i++)
      {
       sum=0;
       for(int j=i;j<n;j++)
       {
            sum+=A[j];
         if(sum>maximum)maximum=sum;
                   
       }
      }
      return maximum;
    }
    
    //method3
    /*
    分配一个额外的数组b[0,...,length-1],b[i]表示位置i和i之前的元素构成的子数组之和的最大值。
    b[i]求解方法:若b[i-1]<0,b[i]=A[i];若b[i-1]>=0,b[i]=b[i-1]+A[i];
    */
    
    int MaxSum3(int* A,int n)
    {
         int* b=new int[n];
         b[0]=A[0];
      for(int i=1;i<n;i++)
      {
           if(b[i-1]<0)b[i]=A[i];
        else b[i]=A[i]+b[i-1];
      }
      int max=b[0];
      for(int i=0;i<n;i++)
      {
          if(b[i]>max)max=b[i];
      }
    delete [] b; return max; } int main() { int *A; int n; while(cin>>n,n) { A=new int[n]; for(int i=0;i<n;i++)cin>>A[i]; int max=MaxSum(A,n); cout<<"数组的子数组之和的最大值为: "<<max<<endl; max=MaxSum2(A,n); cout<<"数组的子数组之和的最大值为: "<<max<<endl; max=MaxSum3(A,n); cout<<"数组的子数组之和的最大值为: "<<max<<endl; }
    delete [] A; system("pause"); return 0; }

      

  • 相关阅读:
    基于ffmpeg 直播推流和播放rtmp (IOS源码)
    Hadoop 安装指南
    机器学习算法( 七、AdaBoost元算法)
    机器学习算法( 五、Logistic回归算法)
    机器学习算法( 四、朴素贝叶斯算法)
    机器学习算法( 三、决策树)
    机器学习算法( 二、K
    Solr 多字段、打分规则、权重和实时索引同步
    Android Activity生命周期
    .net , java webSocket 连接 Socket.io (1.4.4版本) 问题
  • 原文地址:https://www.cnblogs.com/yanglf/p/2757675.html
Copyright © 2011-2022 走看看