Skip to main content

Maximum Product Subarray

Problem statement

Given an integer array nums, find a contiguous non-empty subarray within the array that has the largest product, and return the product.

The test cases are generated so that the answer will fit in a 32-bit integer.

A subarray is a contiguous subsequence of the array.

Example 1:

Input: nums = [2,3,-2,4]Output: 6Explanation: [2,3] has the largest product 6.

Example 2:

Input: nums = [-2,0,-1]Output: 0Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

Constraints:

  • 1 <= nums.length <= 2 * 104
  • -10 <= nums[i] <= 10
  • The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.

My solution

/**
* @param {number[]} nums
* @return {number}
*/
var maxProduct = function(nums) {
// let res = nums[0];
// let l = 0;
// let r = 0;

// for (let i = 0;i<nums.length; i++) {
// l = (!l ? 1 : l) * nums[i]
// r = (!r ? 1 : r) * nums[nums.length - 1 - i]
// // console.log(l, r)
// res = Math.max(res, l, r)
// }

// return res;
if (nums.length === 0) {
return -1;
}

let min = nums[0];
let max = nums[0];
let results = nums[0];

for (let i = 1; i < nums.length; i++) {
let temp = max;
max = Math.max(
Math.max(max * nums[i], min * nums[i]),
nums[i]
)

min = Math.min(
Math.min(temp * nums[i], min * nums[i]),
nums[i]
)

if (max > results) {
results = max;
}
}

return results;
};