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