一、实践题目:求最大子段和
二、问题描述
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
三、算法描述
int max(int s[],int n){
int mac=0,c=0; for(int i=0;i<n;i++){
if(c>0){ c=c+s[i]; } else{ c=s[i]; //若i位置之前的子段和为负,则舍弃之前的子段和。
}
//c的每一次结果均为当前i位置的最大子段和,不是前i的最大子段和,因为i位置可能为负数,前子段和加上i可能会变小。
if(mac<c){ mac=c; } } return mac; }
四、算法时间及空间复杂度分析(要有分析过程)
五、心得体会(对本次实践收获及疑惑进行总结)
原文:https://www.cnblogs.com/fine-five/p/9941148.html