题目
基本思路
典型的动态规划问题
在整个过程中,dp[i]的值只需要dp[i-1]的值,不需要保存整个DP表,则DP可以用滚动数组进行优化。
其实就是设一对prevMin/prevMax表示上一个值,以及还有一对curMin/curMax表示当前值。
实现代码
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
length = len(nums)
maxPro = nums[0]
prevMax,prevMin = nums[0],nums[0]
for i in range(1,length):
curMax = max(nums[i],max(prevMax*nums[i],prevMin*nums[i]))
curMin = min(nums[i],min(prevMax*nums[i],prevMin*nums[i]))
prevMax,prevMin = curMax,curMin
maxPro = max(prevMax,maxPro)
return maxPro