题目:
难度: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;
};