152-maximum-product-subarray¶
Try it on leetcode
Description¶
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: 6 Explanation: [2,3] has the largest product 6.
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.
Solution(Python)¶
class Solution:
def maxProduct(self, arr: List[int]) -> int:
# max positive product
# ending at the current position
max_ending_here = arr[0]
n = len(arr)
# min negative product ending
# at the current position
min_ending_here = arr[0]
# Initialize overall max product
max_so_far = arr[0]
# /* Traverse through the array.
# the maximum product subarray ending at an index
# will be the maximum of the element itself,
# the product of element and max product ending previously
# and the min product ending previously. */
for i in range(1, n):
temp = max(max(arr[i], arr[i] * max_ending_here), arr[i] * min_ending_here)
min_ending_here = min(min(arr[i], arr[i] * max_ending_here), arr[i] * min_ending_here)
max_ending_here = temp
max_so_far = max(max_so_far, max_ending_here)
return max_so_far