方法:最简单的方法就是把所有子数组遍历一遍求和找最大值。
显然有更好的方法。
我们考虑长为N的一个数组arr的最后一个元素arr[N-1]与前N-1项的和最大连续子数组的关系,有三种情况:
1、等于arr[N-1] eg:[1,-3,5]
2、以arr[N-1]结尾 eg:[2,-1,5]
3、与arr[N-1]无关 eg:[5,-3,2]
function maxChildArr(A){
var nAll=A[0]; //当前最大子数组的和
var nEnd=0; //以A[i]结尾的子数组最大和
for(var i=0;i<A.length;i++)
{
nEnd=Math.max(A[i],nEnd+A[i]);//求以A[i]结尾的和最大的子数组的和,要么等于A[i],要么以A[i]结尾
nAll=Math.max(nAll,nEnd);//当前和最大子数组要么是以A[i]结尾,要么和A[i]无关
}
return nAll;
}