leetcode_152 乘积最大子数组

185 阅读1分钟

要求

给你一个整数数组 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

image.png

解题思路:我们拿[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.