Skip to content
  1. 最大子数组和: https://leetcode.cn/problems/maximum-subarray/description

就是一个入门级的 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;
};
  1. 乘积最大子数组 https://leetcode.cn/problems/maximum-product-subarray/description/

就是维护最大值和最小值,然后遇到负数的时候进行“翻转“。最小值始终小于 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;
};
本站访客数 人次 本站总访问量