输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。
描述:
输入随机整数的数组
问题:
求出该数组的所有元素连续的,子数组中,元素和最大的子数组
示例1:
输入数组:[1,2,-3,5,7,-9];
输出结果:[5,7]
示例2:
输入数组:[1,3,-3,5,7,-9,8];
输出结果:[1,3,-3,5,7,]
答案:
let arr = [1,-3,7,-6,2,-2,6,-3,4,6,-8];
let length = arr.length;
let sum = arr[0];
let max = arr[0];
let resMax = max;
let startIndex = 0;
let endIndex = 0;
for(let j=0;j<length;j++){
let sum = arr[j];
let max = arr[j];
for(let i=j; i<length; i++){
if(i==j){
sum = arr[j]
}else{
sum = sum + arr[i];
}
if(sum > max){
max = sum;
endIndex = i;
}
}
if(max >resMax){
resMax = max;
startIndex = j;
}
}
console.log('最大和=' + resMax + ' 起始下标=' + startIndex + ' 结束下标=' + endIndex);
console.log(arr.slice(startIndex,endIndex+1));