类似于53题最大子序和,给一个整数数组 nums ,找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 乘积最大,连续子数组
乘积最大的连续子数组,使用动态规划方法
class Solution:
def maxProduct(self,nums):
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
#方法二
class Solution:
def maxProduct(self,nums):
if not nums:
return
reverse_num = nums[::-1]
for i in range(1,len(nums)):
nums[i] *= nums[i-1] or 1 #nums[i-1] !=0,则nums[i] *= nums[i-1] else nums[i] *= 1
reverse_num[i] *=reverse_num[i-1] or 1
return max(nums+reverse_num) #将两个列表加起来