要求
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
核心代码
class Solution:
def maxProduct(self, nums: List[int]) -> int:
mx = mi = ans = nums[0]
for i in range(1,len(nums)):
tmx,tmi = mx,mi
mi = min(tmi * nums[i],nums[i],tmx * nums[i])
mx = max(tmi * nums[i],nums[i],tmx * nums[i])
ans = max(mx,ans)
return ans
解题思路:我们拿[2,3,-2,4]来进行实例说明,mx = mi = ans = 2,然后开始循环,我们的tmx = tmi = 2,mi = min(6,3,6) = 3,mx = max(6,3,6) = 6,ans = 6,第二轮循环:tmx=6,tmi = 3,mi = min(-6,-2,-12)=-12,mx = max(-6,-2,-12) = -2,ans = 6,第三轮循环:tmx = -2,tmi = -12,mi = min(-8,4,-48) = -48,mx = max(-8,4,-48) = 4,ans = 6,最终结果6.