课堂练习:返回一个整数数组中最大子数组的和

题目要求:输入一个整型数组,数组里有正数也有负数

        数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和

        求所有子数组的和的最大值,要求时间复杂度为O(n)

设计思想

求出所有连续子数组的和,然后进行比较。用array[0]来作为max的初始值.数组里有正数有负数,当与负数相加,如果和小于等于0,最大值等于未加负数之前的和,与正数相加则等于加正数之后的和。

源代码

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int i,n,sum=0;
 7     int array[1000];
 8     cout<<"请输入数组的长度:"<<endl;
 9     cin>>n;
10     int max=array[0];
11     cout<<"请输入数组内的数"<<endl;
12     for(i=0;i<n;i++)
13     {
14         cin>>array[i];
15     }
16     for(i=0;i<n;i++)
17     {
18         if(sum<=0)
19         {
20             sum=array[i];
21         }
22         else 
23         {
24             sum=sum+array[i];
25         }
26         if(sum>max)
27         {
28             max=sum;
29         }
30     }
31     cout<<"子数组和的最大值为"<<max<<endl;
32     return 0;
33 }

结果截图:

总结

编程要善于思考,有了思路再去写,免得一直处于写了再改的模式,重在分析

posted on 2016-04-06 18:24  九块九毛九  阅读(166)  评论(0编辑  收藏  举报