3.求子数组的最大和

来源:互联网 发布:it软件解决方案 编辑:程序博客网 时间:2024/04/30 04:48

题目:输入一个整形数组,数组里有正有负。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

分析:由时间复杂度可见,应该是遍历一次就能找出最大和子数组的和。分析这样的子数组的特征,可得:这个最大子串和的初始值一定是从正数开始的(反证法可证)。代码如下:

int maxsum(int *array, int n, int *result) {int sum = 0, max = 0, i;if (NULL == array)return -1;for (i = 0; i < n; i++) {sum += array[i];if (sum < 0)sum = 0;else if (sum > max)max = sum;}*result = max;return 0;}
不足:没有考虑输入数组都是非正数的情况。

原创粉丝点击