zoukankan      html  css  js  c++  java
  • 数组之求最大子数组之和(二)

         相比第一次 这次数组改编为环形数组 所以最大子数组可以分情况讨论

         1.和最大子数组没有跨过数组首尾

       此时可以使用上一个程序的方法

         2.和最大子数组跨过数组首尾

       此时选择 数组总和-最小子数组和得到最大子数组和

            最后再将两者进行比较 确定最大的子数组之和 

         代码如下 

     1 //可以分两个情况
     2 //1.和最大子数组没有跨过数组首尾
     3 //    此时可以使用上一个程序的方法
     4 //2.和最大子数组跨过数组首尾
     5 //    此时选择 数组总和-最小子数组和得到最大子数组和
     6 //最后通过比较两个和的大小选择实际和大小
     7 
     8 #include<iostream>
     9 using namespace std;
    10 int main()
    11 {
    12     int i,num,Max2Sum,result;
    13     cout << "请输入数组元素个数: " ;
    14     cin >> num;
    15     int *arr = new int[num];
    16     cout << "请依次输入数组元素" << endl;
    17     for (i = 0; i < num; i++)
    18     {
    19         cin >> arr[i];
    20     }
    21     int Sum=0;
    22     int temp=0 ;
    23     int CurSum=0;
    24     int MaxSum=0;
    25     int MinSum=0;
    26     for (i = 0; i<num; i++)
    27     {
    28         //第二种情况,求得最大值为Sum-MinSum
    29         Sum+=arr[i];
    30         if (temp>0)
    31         {
    32             temp=arr[i];
    33         }
    34         else
    35         {
    36             temp=temp+arr[i];
    37         }
    38         if (temp<MinSum)
    39         {
    40             MinSum=temp;
    41         }
    42         //第一种情况,求得最大值为CurSum
    43         CurSum+=arr[i];
    44         if(CurSum>MaxSum)
    45         {
    46             MaxSum=CurSum;
    47         }
    48         if(CurSum<0)
    49         {
    50             CurSum=0;
    51         }
    52     }
    53     Max2Sum=Sum-MinSum;
    54     if(CurSum>Max2Sum)  //较大的为最大值
    55     {
    56         result=CurSum;
    57     }
    58     else
    59     {
    60         result=Max2Sum;
    61     }
    62     cout <<"该数组中最大子数组的和是: "<< result<<endl;
    63     system("pause");
    64     return 0;
    65 }

     

    第二种

    周活动日志:

      听课 编写程序 阅读课本 日总计
    周一 2h   0 2h
    周二 0   0 0
    周三 0   1h 1h
    周四 0 2h 0 0
    周五 0 1h 0 1h
    周六 0 3h 0 3h
    周日        
    周总计 200 6h 1 6h

    缺陷日志:

    日期 编号 缺陷内容 引入阶段 排除阶段 修复时间 修复缺陷
    3月25日 1

    时间复杂度的最优化

    编写代码 思考、查资料 1h+

    动态规划

    3月26日 2

    如何计算循环

    数组首尾相接处

    连续子段的和

    编写代码 思考、查资料 120+

    数组总和减去最小子数组组

  • 相关阅读:
    python wsdl connection refused 111
    我要学算法
    linux 定时任务
    mysql语句
    Firefox配置Fiddler
    windows下安装spynner
    做一个完整的项目需要技能
    快速排序
    《实时控制软件设计》总结
    asp实现在微信jsdk分享从a页面跳转到b页面然后分享后点开又回a页面
  • 原文地址:https://www.cnblogs.com/lyhao/p/5326400.html
Copyright © 2011-2022 走看看