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 }

        

  • 相关阅读:
    Delphi: TMemo垂直滚动条自动显示
    利用百度地图API制作房产酒店地图
    百度地图API--信息窗口
    Echarts饼状图
    JS截取与分割字符串常用技巧总结
    JS DOM1核心概要document
    JS DOM1核心概要1
    phpMVC框架的核心启动类定义
    jquery实现无限滚动瀑布流实现原理
    php连接数据库步骤
  • 原文地址:https://www.cnblogs.com/w123456qaz/p/9901156.html
Copyright © 2011-2022 走看看