https://leetcode.com/problems/maximum-product-subarray/description/
Given an integer array nums
, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example 1:
Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2:
Input: [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# initial
ret = main_val = aux_val = nums[0]
for i in range(1, len(nums)):
main_val *= nums[i]
aux_val *= nums[i]
# update aux_val
if main_val*aux_val > 0: # record same product value, update aux_val
aux_val = nums[i]
elif main_val*aux_val == 0: # if main_val or aux_val is 0, they all need to update
main_val, aux_val = nums[i], nums[i]
else: pass
ret = max(ret, main_val, aux_val, nums[i])
return ret