美文网首页LeetCode笔记
乘积最大子序列

乘积最大子序列

作者: 只为此心无垠 | 来源:发表于2018-03-20 15:21 被阅读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

    相关文章

      网友评论

        本文标题:乘积最大子序列

        本文链接:https://www.haomeiwen.com/subject/urjrqftx.html