结对作业 返回一个整数数组中最大子数组的和
一、程序题目
返回一个整数数组中最大子数组的和。
二、程序要求
1、输入一个整型数组,数组里有正数也有负数;
2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
3、求所有子数组的和的最大值,要求时间复杂度为O(n)。
三、程序设计思想
1、数组的长度和各个元素由键盘键入;
2、先将各元素累加,每加一个数,看结果是否为0,若为0,重置结果,并且结果与最大子数组和(简称最大和)比较,若有更大的和,就保存较大的结果到最大和中;
3、若最大和与结果的值均为0,说明数组为负数数组,最大子数组即为最大元素。
四、源程序代码
1 //李翠冉 郝家枫
2 //求整数数组的最大子数组的和
3
4 #include<iostream>
5 using namespace std;
6
7 int main()
8 {
9 int arrlength, i;
10 int maxsum = 0, sum = 0;
11 int arr[100];
12
13 cout << "请输入数组长度:";
14 cin >> arrlength;
15 if (arr == NULL || arrlength == 0)
16 {
17 //exit(1);
18 return 0;
19 }
20
21 cout << "请输入数组元素:";
22 for (i = 0; i<arrlength; i++)
23 {
24 cin >> arr[i];
25 }
26
27 maxsum = 0;
28 sum = 0;
29 for (i = 0; i<arrlength; i++)
30 {
31 sum = sum + arr[i];//累加
32
33 if (sum<0) //当前和小于0,重置为0
34 {
35 sum = 0;
36 }
37
38 if (sum>maxsum) // 当前和大于最大和,则重置最大和
39 {
40 maxsum = sum;
41 }
42 }
43
44 if (maxsum == 0) //maxsum=0,说明数组中的数值均为负数
45 {
46 maxsum = arr[0];
47 for (i = 1; i<arrlength; i++)
48 {
49 if (arr[i]>maxsum)//求出负数数组的最大值
50 {
51 maxsum = arr[i];
52 }
53 }
54 }
55 cout << "最大子数组的和为:" << maxsum << endl;
56
57 return 0;
58 }
浙公网安备 33010602011771号