class Solution:
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
maxi = nums[0]
dp_min = [0] * n
dp_max = [0] * n
dp_min[0] = dp_max[0] = nums[0]
for i in range(1, n):
dp_min[i] = min(dp_max[i - 1] * nums[i],
dp_min[i - 1] * nums[i],
nums[i])
dp_max[i] = max(dp_max[i - 1] * nums[i],
dp_min[i - 1] * nums[i],
nums[i])
# maxi = max(dp_max[i], maxi)
maxi = max(dp_max)
return maxi
# 由于只用到i, i-1, 故可用preMin,curMin,preMax,curMax替换,使空间复杂度为O(1)