https://leetcode.com/problems/maximum-product-subarray/
最大乘积子数组
# 解法一,使用两个动态数组
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = nums[0]
dp_max = [1 for _ in range(len(nums)+1)]
dp_min = [1 for _ in range(len(nums)+1)]
for i in range(len(nums)):
dp_max[i+1] = max(dp_max[i]*nums[i], dp_min[i]*nums[i],nums[i])
dp_min[i+1] = min(dp_min[i]*nums[i], dp_max[i]*nums[i],nums[i])
res = max(dp_max[i], res)
return res
# 解法二,优化解法一的空间
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res, dp_max, dp_min = nums[0], nums[0], nums[0]
for i in range(1, len(nums)):
t_max, t_min = dp_max, dp_min
dp_max = max(t_max*nums[i], t_min*nums[i], nums[i])
dp_min = min(t_max*nums[i], t_min*nums[i], nums[i])
res = max(dp_max, res)
return res