https://leetcode-cn.com/problems/maximum-product-subarray/
点击查看【bilibili】
题目
给你一个整数数组 nums
,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
解答
答案
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(max,maxProductMemo[i])
}
return max
};