leetcode(js)-每日一练之 乘积最大子数组 题库编号152

leetcode(js)-每日一练之 乘积最大子数组

leetcode(js)-每日一练之 乘积最大子数组 题库编号152_第1张图片
这道题部分思路跟
最大子序和
这道题类似,刚开始做的时候,我觉得先把最大子序和的加号变成乘号试试

var maxProduct = function(nums) {
 let memo = [];
            memo[0] = nums[0];
            let max = nums[0];
            for (let i = 1; i < nums.length; i++) {
                memo[i] = Math.max(nums[i] * memo[i - 1], nums[i]);
                max = Math.max(max, memo[i]);;
            }
            return max
};

leetcode(js)-每日一练之 乘积最大子数组 题库编号152_第2张图片

会发现不对,想了想是因为,负数成负数会变成超大的一个数,所以决定再用一个数组存最小的数

        var maxProduct = function(nums) {
            const maxProductmemo = [];
            const minProductmemo = [];
            maxProductmemo[0] = nums[0];
            minProductmemo[0] = nums[0];
            let max = nums[0];
            for (let i = 1; i < nums.length; i++) {
                maxProductmemo[i] = Math.max(nums[i], nums[i] * maxProductmemo[i - 1], nums[i] * minProductmemo[i - 1]);
                minProductmemo[i] = Math.min(nums[i], nums[i] * maxProductmemo[i - 1], nums[i] * minProductmemo[i - 1]);
                max = Math.max(maxProductmemo[i], max);
            }
            return max;
        };

你可能感兴趣的:(leetcode(js)-每日一练之 乘积最大子数组 题库编号152)