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
numsis 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;
};