def max_product_subarray(nums): max_prod = min_prod = result = nums[0] for num in nums[1:]: candidates = (num, max_prod * num, min_prod * num) max_prod = max(candidates) min_prod = min(candidates) result = max(result, max_prod) return result print(max_product_subarray([2,3,-2,4]))
The maximum product subarray is [2,3] with product 6. The code tracks max and min products to handle negative numbers correctly.
def max_product_subarray(nums): max_prod = min_prod = result = nums[0] for num in nums[1:]: candidates = (num, max_prod * num, min_prod * num) max_prod = max(candidates) min_prod = min(candidates) result = max(result, max_prod) return result print(max_product_subarray([-2,0,-1]))
The maximum product subarray is [0] with product 0. Negative numbers and zero reset the product tracking.
def max_product_subarray(nums): max_prod = min_prod = result = 0 for num in nums: candidates = (num, max_prod * num, min_prod * num) max_prod = max(candidates) min_prod = min(candidates) result = max(result, max_prod) return result print(max_product_subarray([-2]))
Initializing max_prod, min_prod, and result to 0 causes incorrect tracking because the first element might be positive and greater than 0, but the code never sets them to the first element's value.
Tracking the minimum product is important because multiplying it by a negative number can turn it into a large positive product, which might be the maximum.
The maximum product subarray is [7, -8, -2] with product 112 and length 3. Zero resets the product, so subarrays containing zero are considered separately.
