结对作业 返回一个整数数组中最大子数组的和
一、程序题目
返回一个整数数组中最大子数组的和。
二、程序要求
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 }