求最大子段和

来源:互联网 发布:51单片机delay延时函数 编辑:程序博客网 时间:2024/05/07 03:44

求最大子段和的扫描算法中,并不能成立数组中元素全为负数的情况。

扫描算法:

sum=0;

max=0;

for i=[0,n)

sum=max(sum+a[i],0);

max=(max,sum);

但这显然不能够处理元素全为负数的情况。这里要进行单独处理,我们可以将负数的处理判断和for循环放在一起进行处理,提高效率。

/*author:song0071000#126.comtime:20140419function:get the max subsum(include all the element is negative)*/int GetMaxSubSum(int a[],int n)//这里的强制条件就是n>0{bool isAllNeg = true;int maxneg = INT_MIN;int max = a[0];int sum = 0;for(int i = 0 ;i < n ; i++){sum = sum + a[i];if(sum < 0)sum = 0;if(max < sum)max = sum;if(a[i]>=0&&isAllNeg)isAllNeg = false;else if(a[i]<0&&isAllNeg&&(maxneg<a[i])){maxneg = a[i];}}return isAllNeg ? maxneg : max;}


0 0
原创粉丝点击