问题描述:
求【-2,-4,-7,-20,1,1,1,1,-10,1,1,1,5,-10,10,10,10,-25,10,10,10,10,10,10,-300】这一个集合中,求它子集中和为最大的子集以及最大和。
代码实现:
function Fn(arr){
var positiveNum = arr[0];
var maxNum = arr[0];
if(positiveNum<0){
positiveNum = 0;
}
var positiveArr = [];
var maxArr = [];
for (var i = 0;i<arr.length;i++) {
positiveNum += arr[i];
positiveArr = positiveArr.concat(arr[i]) ;
if (positiveNum > maxNum) {
maxNum = positiveNum;
maxArr = positiveArr;
}
if (positiveNum < 0) {
positiveNum = 0;
positiveArr = [];
}
}
return maxArr;
}
问题解释:
首先我们需要两个变量,一个用来记录最大的和,另一个用来记录位置,当我们加到后一个数的时候与最大值进行比较,如果与当前位置加和大于目前已经有的最大值,那么用该值替换掉最大值。如果与当前位置加和之后小于0,那么截断数组,把当前位置加和设置为0。