给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
【中等】
【分析】题意是要得到乘积最大的连续子序列的乘积值。
处理连续问题:可以考虑max_=max(max_*num[i],num[i])
,就是说如果num[i]对max_有贡献的话就乘,如果没有贡献就从头开始乘。
处理负数的问题:可以记录当前乘积的最小值,如果遇到两个负数,它可能就变成最大值了。考虑min_=max(min_*num[i],num[i])
记录遍历过程中的最大值,res=max(max_,res)
当前遍历的num[i]<0,则交换max_,min_的值
。
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
min_,max_,res=1,1,-float("inf")
for i in nums:
if i<0:
min_,max_=max_,min_
min_=min(min_*i,i)
max_=max(max_*i,i)
res=max(max_,res)
return res