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

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

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

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

  要是累加过程中和小于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 }

结果截图:

 

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

 

 posted on 2016-03-26 17:23  呼噜~呼噜  阅读(1078)  评论(1编辑  收藏  举报