数组之求最大子数组之和
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 }
第二种
以上是关于数组之求最大子数组之和的主要内容,如果未能解决你的问题,请参考以下文章