数组之求最大子数组之和

Posted 来自代码的诅咒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组之求最大子数组之和相关的知识,希望对你有一定的参考价值。

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

     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 }

 技术分享

第二种

技术分享

 

以上是关于数组之求最大子数组之和的主要内容,如果未能解决你的问题,请参考以下文章

Java之求数组中两个数之和

最大子数组之和 2

求一个数组的最大子数组之和

环形数组最大子数组之和

环形数组最大子数组之和

最大子数组之和