找出一个序列中乘积最大的连续子序列(至少包含一个数)。
样例 1:
输入:[2,3,-2,4] 输出:6
样例 2:
输入:[-1,2,4,1] 输出:8
数组长度不超过20000乘积最大的子序列的积,小于2147483647
class Solution: """ @param nums: An array of integers @return: An integer """ ''' 大致思路: 1.最值型动态规划,dp[j] 需要保证前面的是最大或者是最小,乘积,然后最后根据这个前面的最值乘积相差(注意,是子序列,不要求连续) 同时保留两个极值 如果a[j]是正数,我们希望以a[j-1]结尾的连续子序列乘积最大 如果a[j]是负数,我们希望以a[j-1]结尾的连续子序列乘积最小 ''' def maxProduct(self, nums): if not nums:return 0 # l = len(nums) #每次放入的是最大值f,每次放入的是最小值g f = [0]*l g = [0]*l for i in range(l): f[i] = g[i] = nums[i] #注意,i > 0是避免i - 1 越界,上面i = 0,一次赋值即可 if (i > 0): #求最大,可能是--得到最大值的情况 f[i] = max(f[i],max(f[i - 1]*nums[i],g[i - 1]*nums[i])) g[i] = min(g[i],min(g[i - 1]*nums[i],f[i - 1]*nums[i])) #最后在取出最大值即可 return max(f)