LeetCode笔记

乘积最大子序列

2018-03-20  本文已影响9人  只为此心无垠

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
上一篇 下一篇

猜你喜欢

热点阅读