码迷,mamicode.com
首页 > 其他好文 > 详细

152乘积最大子序列

时间:2020-02-14 12:42:52      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:数组   lis   之间   来源   别人   style   src   最小值   event   

题目:给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

来源:https://leetcode-cn.com/problems/maximum-product-subarray/

法一:别人代码

思路:由于想用动态规划解题,通过观察数字可以发现从nums[i]到nums[i+1]的最大值之间的关系,由于有负数的存在,最大值可能直接转化为最小值,所以为了无后效性,直接把前面的最大值和最小值保存了,每次乘完后再比较。

技术图片
class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        if not nums: return 
        res = nums[0]
        pre_max = nums[0]
        pre_min = nums[0]
        for num in nums[1:]:
            cur_max = max(pre_max * num, pre_min * num, num)
            cur_min = min(pre_max * num, pre_min * num, num)
            # 注意这里的最大值要另外求
            res = max(res, cur_max)
            pre_max = cur_max
            pre_min = cur_min
        return res
if __name__ == __main__:
    duixiang = Solution()
    # a = duixiang.maxProduct([2,3,-2,4,-9])
    # a = duixiang.maxProduct([2, 3, -2, 4])
    # b = [2,-5,-2,-4,3]
    # # b.reverse()
    # a = duixiang.maxProduct(b)
    # b = [1, -2, 0, 1, -4, 1, 1, 5, 4, -1, 6, 4, 1, -5, 0, -1, -5, 1, -6, -4]
    b = [3, -2, -3, -3, 1, 3, 0]
    b = [-1,-2,-9,-6]
    # b.reverse()
    a = duixiang.maxProduct(b)
    print(a)
View Code

法二:利用负数的奇偶解题

152乘积最大子序列

标签:数组   lis   之间   来源   别人   style   src   最小值   event   

原文地址:https://www.cnblogs.com/xxswkl/p/12306760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!