就是一个入门级的 dp
js
var maxSubArray = function(nums) {
// 初始化
let preSum = 0;
const len = nums.length;
let maxSum = -Infinity;
for(let i=0;i<len;i++){
// 如果之前积累的是负数,那就舍弃掉。
preSum = Math.max(0,preSum) + nums[i];
// 如果值更大,就保留下来。
if(preSum > maxSum) maxSum = preSum;
}
return maxSum;
};就是维护最大值和最小值,然后遇到负数的时候进行“翻转“。最小值始终小于 0,所以用 Math.min; 最大值为了处理 0 的情况,用 Math.max。
每次都把新的乘进去。
js
var maxProduct = function(nums) {
let result = nums[0];
let imax = nums[0];
let imin = nums[0];
for(let i=1;i<nums.length;i++){
if(nums[i]<0){
[imax, imin] = [imin, imax]
}
imax = Math.max(imax * nums[i], nums[i]);
imin = Math.min(imin * nums[i], nums[i]);
result = Math.max(result, imax);
}
return result;
};