中等数组动态规划
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] <= 10nums的任何子数组的乘积都 保证 是一个 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. 乘积最大子数组