← 题库
中等数组动态规划

PROBLEM / 研究生阶段

152. 乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

请注意,一个只包含一个元素的数组的乘积是这个元素的值。

示例 1:

输入: nums = 2,3,-2,4输出: 6解释: 子数组 2,3 有最大乘积 6。

示例 2:

输入: nums = -2,0,-1输出: 0 解释: 结果不能为 2, 因为 -2,-1 不是子数组。

提示:

  • 1 <= nums.length <= 2 * 104
  • -10 <= nums[i] <= 10
  • nums 的任何子数组的乘积都 保证 是一个 32-位 整数

参考解法

下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。

python

class Solution(object):
    def maxProduct(self, nums):
        if not nums:
            return 0
        current_max = current_min = global_max = nums[0]
        
        # 从第二个元素开始遍历
        for num in nums[1:]:
            # 因为当前数可能是负数,乘以前面的最小值可能变成最大值,所以先保存当前max
            temp = current_max
            current_max = max(num, temp * num, current_min * num)
            current_min = min(num, temp * num, current_min * num)
            global_max = max(global_max, current_max)
        return global_max
        """
        :type nums: List[int]
        :rtype: int
        """
这道题暂未附参考解法,编辑器草稿仍会自动保存在本机。
YOUR SOLUTION152. 乘积最大子数组