https://leetcode-cn.com/problems/maximum-product-subarray/
点击查看【bilibili】

题目

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

示例

  1. 输入: [2,3,-2,4]
  2. 输出: 6
  3. 解释: 子数组 [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
};