今天看到一道题目,还是挺有意思的,来记录一下:
题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
var maxSubArray = function (nums) {
let pre = 0, maxAns = nums[0];
nums.forEach((x) => {
pre = Math.max(pre + x, x);
maxAns = Math.max(maxAns, pre);
});
return maxAns;
};
上面的方法还是很巧妙的,但是再加一个,还要输出该连续子数组
function maxSubArray(list) {
let arr1 = JSON.parse(JSON.stringify(arr))
const len = list.length;
let max = list[0];
let start = 0;
let end = 0;
for (let i = 1; i < len; i++) {
list[i] = Math.max(0, list[i - 1]) + list[i];
if (list[i] > max) {
max = list[i]
if (list[i - 1] > 0) {
end = i
} else {
start = i
}
}
}
if(start > end) {
end = start
}
return { max, arr: arr1.slice(start,end+1)};
}