leetcode 152.乘积最大子序列python实现

题目要求:

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

示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

解题思路:
由于是求的是最大的乘积子序列,所以有可能是由负数与负数相乘得来的,也有可能是正数与正数相乘而来,所以要保留两个空间,一个存最大值,一个存最小值,当遍历nums[i]>0时,最大值为最大值nums[i],最小值为最小值num[i],如果nums[i]<0,则反之。

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        if len(nums)==1:
            return nums[0]
        dp=[[nums[0],nums[0]] for i in range(len(nums))]
        res = nums[0]
        #dp[][0]存储最大值,dp[][1]存储最小值
        for i in range(1,len(nums)):
            if nums[i]>=0:
                dp[i][0] = max(dp[i-1][0]*nums[i],nums[i])
                dp[i][1] = min(dp[i-1][1]*nums[i],nums[i])
            else:
                dp[i][0] = max(dp[i-1][1]*nums[i],nums[i])
                dp[i][1] = min(dp[i-1][0]*nums[i],nums[i])
            if dp[i][0]>res:
                res = dp[i][0]
        return res
全部评论

相关推荐

03-29 19:11
门头沟学院 Java
wyp_davis:是可以这样的,不过只要交钱就是假的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务