• 数组之求最大子数组之和(二)


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

         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+

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

  • 相关阅读:
    《整理的艺术》读后感
    就算神游 之二:行路 2
    VBA实现outlook自动发信 2
    使用Event的体会
    DevExpress Asp.net(9) ASPxHiddenField的特性与基本使用
    .net 启动窗休的设计总结
    DevExpress Asp.net(5) ASPxCloudControl的基本使用
    DevExpress Asp.net(7) ASPxTreeList的基本使用之一
    数据结构树形结构(1)
    数据结构树形结构(2)
  • 原文地址:https://www.cnblogs.com/lyhao/p/5326400.html
Copyright © 2020-2023  润新知