题目描述
https://leetcode-cn.com/problems/maximum-product-subarray/
思路题解
双dp
class Solution:
def maxProduct(self, nums: List[int]) -> int:
maxdp=nums[:]
mindp=nums[:]
for i in range(1,len(nums)):
maxdp[i]=max(maxdp[i-1]*nums[i],mindp[i-1]*nums[i],nums[i])
mindp[i]=min(maxdp[i-1]*nums[i],mindp[i-1]*nums[i],nums[i])
return max(maxdp)
双dp优化
因i的状态只与i-1有关,可以省去数组,dp优化
class Solution:
def maxProduct(self, nums: List[int]) -> int:
ans=maxi=mini=nums[0]
for i in range(1,len(nums)):
maxi,mini=max(maxi*nums[i],mini*nums[i],nums[i]),min(maxi*nums[i],mini*nums[i],nums[i])
ans=max(maxi,ans)
return ans