如官方题解所说,按照最优子结构,以a[i]为结尾的最大乘积数组可以是{a[i], a[i]与上个元素的最大乘积相连, a[i]与上个元素的最小乘积相连}三种情况之一。
最小乘积数组也是同理。
这题的关键是最优子结构不是单纯取决于上个元素的最大乘积子数组。
class Solution:
def maxProduct(self, nums: List[int]) -> int:
minF, maxF, res = nums[0], nums[0], nums[0]
for i in range(1, len(nums)):
minF, maxF = min(minF * nums[i], maxF * nums[i], nums[i]), max(minF * nums[i], maxF * nums[i], nums[i])
res = max(res, maxF)
return res