From b7d623a303db07ea78aa9c82ca08e8210720ef55 Mon Sep 17 00:00:00 2001 From: Vitor Oliveira Date: Fri, 3 Sep 2021 12:35:10 -0700 Subject: [PATCH] add output for max_product algorithm --- .../arrays/maximum_product_subarray.rb | 77 ++++++++++--------- 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/data_structures/arrays/maximum_product_subarray.rb b/data_structures/arrays/maximum_product_subarray.rb index da458bc..37d97d2 100644 --- a/data_structures/arrays/maximum_product_subarray.rb +++ b/data_structures/arrays/maximum_product_subarray.rb @@ -1,44 +1,51 @@ -#Given an integer array nums, find a contiguous non-empty subarray within the array that has the largest product, and return the product. -#It is guaranteed 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: 6 -#Explanation: [2,3] has the largest product 6. +# Given an integer array nums, find a contiguous non-empty subarray within the array that has the largest product, and return the product. +# It is guaranteed that the answer will fit in a 32-bit integer. +# A subarray is a contiguous subsequence of the array. -#Example 2: -#Input: nums = [-2,0,-1] -#Output: 0 -#Explanation: The result cannot be 2, because [-2,-1] is not a subarray. +# Example 1: +# Input: nums = [2,3,-2,4] +# Output: 6 +# Explanation: [2,3] has the largest product 6. -#Constraints: -#1 <= nums.length <= 2 * 104 +# Example 2: +# Input: nums = [-2,0,-1] +# Output: 0 +# Explanation: 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. - - - - -#Dynamic Programming Approach (Kadane's Algorithm) - O(n) Time / O(1) Space -#Track both current minimum and current maximum (Due to possibility of multiple negative numbers) -#Answer is the highest value of current maximum +# The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer. +# Dynamic Programming Approach (Kadane's Algorithm) - O(n) Time / O(1) Space +# Track both current minimum and current maximum (Due to possibility of multiple negative numbers) +# Answer is the highest value of current maximum # @param {Integer[]} nums # @return {Integer} def max_product(nums) - return nums[0] if nums.length == 1 - - cur_min, cur_max, max = 1, 1, -11 - - nums.each do |val| - tmp_cur_max = cur_max - cur_max = [val, val*cur_max, val*cur_min].max - cur_min = [val, val*tmp_cur_max, val*cur_min].min - - max = [max, cur_max].max - end - - max -end \ No newline at end of file + return nums[0] if nums.length == 1 + + cur_min = 1 + cur_max = 1 + max = -11 + + nums.each do |val| + tmp_cur_max = cur_max + cur_max = [val, val * cur_max, val * cur_min].max + cur_min = [val, val * tmp_cur_max, val * cur_min].min + + max = [max, cur_max].max + end + + max +end + +nums = [2, 3, -2, 4] +puts max_product(nums) +# Output: 6 + +nums = [-2, 0, -1] +puts max_product(nums) +# Output: 0