zoukankan      html  css  js  c++  java
  • 用c++实现环形数组的最大子数组之和

    思路:

      把一维环形数组从某一段切开,然后转化为之前做过的一维数组最大子数组的和的问题,

      然后都其中切开的每一段一维数组做比较,输出最大的值。

        

     1 #include<iostream>
     2 #include<stdlib.h>
     3 #include<time.h>
     4 using namespace std;
     5 int main()
     6 {
     7     int n;
     8     cout<<"请输入一维环形数组的长度:";
     9     cin>>n;
    10     int *p=new int[n];//定义数组
    11     srand((unsigned)time(NULL));
    12     cout<<"随机获得一个数组:"<<endl;
    13     for(int i=0;i<n;i++)
    14     {
    15         p[i]=rand()%200-100; //随机取-100~100中的整数
    16         cout<<p[i]<<" ";
    17     }
    18     cout<<endl;
    19     int t,m,*sum=new int[n],*max_sum=new int[n];
    20     //用sum数组储存子数组的和,用max_sum数组储存最大子数组的和
    21     for(int i=0;i<n;i++)
    22     {
    23         sum[i]=p[0];
    24         max_sum[i]=p[0];
    25         for(int j=1;j<n;j++)
    26         {
    27             if(sum[i]>0)//从第二个数开始判断是否为正数
    28             { 
    29                 sum[i]=sum[i]+p[j];  //是正数,将和值(初始值为p[0])和第i+1个数做和。
    30                 if(sum[i]>max_sum[i])// 并判断是否为最大,是让其赋值给max_sum,并将子数组末位置改变。
    31                 {
    32                     max_sum[i]=sum[i];
    33                 }
    34             }
    35             else 
    36             { 
    37                 sum[i]=p[j]; //是负数,将第i+1个数的值赋值给和值sum
    38                 if(sum[i]>max_sum[i]) //并判断是否为最大,是让其赋值给max_sum,并将子数组初、末位置改变。
    39                 {    
    40                     max_sum[i]=sum[i];
    41                 }
    42             }
    43         }
    44         //环形数组转换成新的一维数组
    45         m=p[0];
    46         p[0]=p[n-1];
    47         for(int k=0;k<n-1;k++)
    48         {
    49             t=m;
    50             m=p[k+1];
    51             p[k+1]=t;
    52         }
    53     }
    54     int max=max_sum[0];//max为max-sum数组的最大值
    55     for(int i=1;i<n;i++)
    56     {
    57         if(max_sum[i]>max)
    58         {
    59             max=max_sum[i];
    60         }
    61     }
    62     cout<<"最大子数组的和为"<<max<<endl;
    63     return 0;
    64 }

        

  • 相关阅读:
    Android Studio无法预览xml布局之解决方法(两种)
    ssm web.xml配置解析
    ssm框架下实现文件上传
    spring mvc使用@InitBinder 标签对表单数据绑定
    Jquery实现相对浏览器位置固定、悬浮
    asp,php,jsp 不缓存网页的办法
    Spring 2.5
    ERROR 1366 (HY000): Incorrect string value: 'xB3xA4xC9xB3' for column
    DELPHI SOKET 编程--使用TServerSocket和TClientSocket
    SVN switch 用法总结
  • 原文地址:https://www.cnblogs.com/w123456qaz/p/9901156.html
Copyright © 2011-2022 走看看