• 191. 乘积最大子序列(两个最值型动态规划)


    191. 乘积最大子序列

    中文English

    找出一个序列中乘积最大的连续子序列(至少包含一个数)。

    样例

    样例 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)
                    
                    
  • 相关阅读:
    ABAP中的‘多线程’
    SAP数据库表维护视图分配事务代码
    SAP调用外部数据库
    ABAP-小技巧/知识(1)
    sap中用函数增加断点(break point)
    把内表 itab1 的 n1 到 n2 行内容附加到 itab2 内表中去.
    ABAP打开TCODE
    查看用户下有那些事务码
    check、continue、exit的区别
    将excel数据导入内表的函数
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13028107.html
走看看 - 开发者的网上家园