返回一个整数数组中最大子数组的和(2)

题目:返回一个整数数组中最大子数组的和

要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。 
 
在做前面一道题目时,并没有考虑数组个数的上限及随机数位数问题,以为是要程序不出错,就是完美的。而通过课堂上验证上次程序,发现数组的和超过某一值时,将不会显示,但同样,程序不会报错,在小程序中后果并不严重,但是一旦开发大型软件,极有可能造成不可弥补的错误和经济上的损失。
 
以下为超过上限截图:
题目要求实现代码:
 1 #include<iostream>
 2 #include<string>
 3 #include<ctime>
 4 #define N 1000
 5 using namespace std;
 6 
 7 int MaxSum(int *arr, int size)
 8 {
 9     int MaxSum = 0;
10     int b = 0;//b是子数组的和
11 
12     for (int i = 0; i < size; i++)
13     {
14         if (b < 0)
15             b = arr[i];//当子数组和小于0时,且无论与后面数组如何相加,和肯定小于后一段数组之和,此时,将b重新赋值,置为下一个元素
16         else
17             b += arr[i];
18         if (MaxSum < b)
19             MaxSum = b;
20     }
21     return MaxSum;
22 }
23 
24 int main()
25 {
26     int arr[N];
27     srand(time(0));
28     for (int j = 0; j < N; j++)
29     {
30         arr[j] = rand() % 1000-500;
31         cout << arr[j] << " ";
32 
33     }
34     cout <<"最大子数组的和为:"<< MaxSum(arr, N) << endl;
35     return 0;
36 }

感悟:在编程的时候不仅仅是完成任务目标就可以,更应该考虑该程序的应用范围,继而进行优化

原文地址:https://www.cnblogs.com/SanShaoS/p/4386609.html