原文:152. 乘积最大子序列(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-0152/

题目:

难度:Middle

相关话题:数组动态规划

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

示例 1:

输入: [2,3,-2,4]
输出: 6
解释:子数组 [2,3] 有最大乘积 6。

示例 2:

输入: [-2,0,-1]
输出: 0
解释:结果不能为 2, 因为 [-2,-1] 不是子数组。
/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {number[]} nums
 * @return {number}
 */
var maxProduct = function(nums) {
    let maxProd = nums[0];
    let currentMax = maxProd;
    let currentMin = maxProd;

    for (let i = 1; i < nums.length; i++) {
        // if we hit a negative number, our max is now min and min is now max
        if (nums[i] < 0) {
            const temp1 = currentMax;
            currentMax = currentMin;
            currentMin = temp1;
        }
        currentMax = Math.max(nums[i], nums[i] * currentMax);
        currentMin = Math.min(nums[i], nums[i] * currentMin);
        maxProd = Math.max(currentMax, maxProd);
    }

    return maxProd;
};