结对作业 返回一个整数数组中最大子数组的和

一、程序题目

  返回一个整数数组中最大子数组的和。

二、程序要求

  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 }
 
posted on 2022-03-19 21:58  GHOST-CR  阅读(24)  评论(0)    收藏  举报