题目描述
给定一个整数数组 nums
,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
思路
当前的最大值有三种可能:
- 之前的最大值乘以当前值
- 之前的最小值是个负数,当前来的这个数也是个负数,一乘反而成了最大值
- 当前值比上述说的都大
- 因此,我们在保留当前最大值的时候,也要保留当前的最小值,以备后用
- 每一轮算完的最大,最小值再当作下一轮之前的最大,最小值处理
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums)<=0:
return None
res=nums[0]
premax=nums[0]
premin=nums[0]
for num in nums[1:]:
curmax=max(premax*num,premin*num,num)
curmin=min(premax*num,premin*num,num)
res=max(res,curmax)
premax=curmax
premin=curmin
return res