题目:
给你一个整数数组
nums
,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。
子数组 是数组的连续子序列。
来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
示例:
示例 1:
输入:nums = [2,3,-2,4]
输出:6
解释:子数组 [2,3] 有最大乘积 6。
示例 2:输入:nums = [-2,0,-1]
输出:0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。
解法:
同时记录利用最小值,防止负数乘负数变成正数。记录当前值、当前值乘前面连续数列最大值、当前值乘前面连续数列最小值中的最大值。
代码:
class Solution: def maxProduct(self, nums: List[int]) -> int: maxes = [nums[0]] mins = [nums[0]] for num in nums[1:]: maxes.append(max(maxes[-1] * num, num, mins[-1] * num)) mins.append(min(mins[-1] * num, num, maxes[-2] * num)) return max(maxes)