LintCode题目地址
找出一个序列中乘积最大的连续子序列(至少包含一个数)。
def maxProduct(self, nums):
# write your code here
# 因为有负数,所以需要记录当前点之前的子序列的最大最小值
# 分析:访问到每个点的时候,以该点为子序列的末尾的乘积,
# 要么是该点本身,要么是该点乘以以前一点为末尾的序列,
# 注意乘积负负得正,故需要记录前面的最大最小值。
n = len(nums)
maxList = [0] * n
minList = [0] * n
multiper = nums[0]
for i in range(n):
# 记录该点本身
maxList[i] = nums[i]
minList[i] = nums[i]
if i > 0:
maxList[i]= max(nums[i],nums[i]*maxList[i-1],nums[i]*minList[i-1])
minList[i]= min(nums[i],nums[i]*maxList[i-1],nums[i]*minList[i-1])
multiper = max(maxList[i],multiper)
return multiper
网友评论