首页 > 编程语言 > 详细

数组问题(一)求子数组和的最大值

时间:2016-03-26 18:46:45      阅读:205      评论:0      收藏:0      [点我收藏+]

  这周我们没有了四则运算,又出现的新的任务:返回一个整数数组中最大子数组的和

  刚一看感觉还是不难的,只需将所有子数组的和都”+“起来再比较就能算出最大值,但是这是比较笨的方法。

  后来有个同学提出使用动态规划的方法可以实现,听他讲了思路之后,我觉得这个比第一个笨方法要好 :)

  然而后来我找到一个比较简便的方法:

  要是累加过程中和小于0,那么和最大的子数组不会包含前面子数组,之后将和归0,从下个元素重新开始计算。

  代码:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int i,num;
 7     cout << "请输入数组元素个数: " ;
 8     cin >> num;
 9     int *arr = new int[num];
10     cout << "请依次输入数组元素" << endl;
11     for (i = 0; i < num; i++)
12     {
13         cin >> arr[i];
14     }
15     int MaxSum = 0;
16     int CurSum = 0;
17     for (i = 0; i<num; i++)
18     {
19         CurSum += arr[i];
20         if (CurSum > MaxSum)
21         {
22             MaxSum = CurSum;
23         }
24         if (CurSum < 0)
25         {
26             CurSum = 0;
27         }
28     }
29     cout <<"该数组中最大子数组的和是: "<< CurSum<<endl;
30     system("pause");
31 
32     return 0;
33 }

结果截图:

技术分享

 

代码编写的过程中没有出现什么问题,主要是问题不难,方法也比较简洁,这次还是学到了很多方法,动态规划什么的,也算是了解了:)

 

数组问题(一)求子数组和的最大值

原文:http://www.cnblogs.com/zzcs/p/5323534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!