152 Maximum Product Subarray

这道题使用dp。 dpMax[i] = max(nums[i], nums[i]*dpMax[i-1], nums[i]*dpMin[i-1]) 

多记录一个        dpMin[i] = min(nums[i], nums[i]*dpMax[i-1], nums[i]*dpMin[i-1]) 

但是空间上不需要记录所有的dpMax和dpMin,因此只需要currentMax,和currentMin记录当前的值。

总的复杂度时间O(n), 空间O(1)

class Solution:
    # @param {integer[]} nums
    # @return {integer}
    def maxProduct(self, nums):
        i = 0
        currentMax, currentMin, ans = nums[0], nums[0], nums[0]
        for i in range(1, len(nums)):
            n = nums[i]
            tmp = currentMax
            currentMax = max(n, n*currentMax, n*currentMin)
            currentMin = min(n, n*tmp, n*currentMin)
            ans = max(ans, currentMax)
        return ans

 

posted @ 2015-07-07 23:41  dapanshe  阅读(105)  评论(0编辑  收藏  举报