/**
 * @param {number[]} nums
 * @return {number}
 */
const maxProduct = (nums) => {
  let min = 1, max = 1, result = Math.max(...nums);

  for (let i = 0; i < nums.length; i++) {
    let tmpMax = max;
    max = Math.max(nums[i] * min, nums[i] * max, nums[i]);
    min = Math.min(nums[i] * min, nums[i] * tmpMax, nums[i])
    result = Math.max(result, max)
  }

  console.log(">")
  console.log(result)
  // console.log(max)
  // console.log(Math.max(result, max))

  return result;
};

maxProduct([2, 3, -2, 4])
// maxProduct([-2, 0, -1])
// maxProduct([0])
// maxProduct([0, 2])
// maxProduct([-2, 3, -4])
// maxProduct([2, 3, -2, 4])
// maxProduct([3, -1, 4]) // 4
// maxProduct([2, -5, -2, -4, 3]) // 24
// maxProduct([-2])
// maxProduct([-1, -2, -9, -6])