码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-03-27 19:31:04      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

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

     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 }

 技术分享

第二种

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/lyhao/p/5326400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!