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