暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

算法之乘积最大子序列

小璇坨坨 2019-07-06
259

 学习算法不是为了面试,而是为了感受编程的魅力!




    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
    示例 1:
    输入: [2,3,-2,4]
    输出: 6
    解释: 子数组 [2,3] 有最大乘积 6。
    示例 2:
    输入: [-2,0,-1]
    输出: 0
    解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。


    方法一:暴露破解

      def test(nums)
        ''' 注意判断nums是否为空,此处省略 '''
      lenNum=len(nums)
        ret = nums[0]
        for i in range(lenNum):
          x=1
          for j in range(1,lenNum):
           x*=nums[j]
           if x > ret:
           ret = x
      return ret

      方法二:DP(动态规划)


        def test(nums):
          ''' 注意判断nums '''
          lenNum= len(nums)
          ret=nums[0]
          maxNum=nums[0]
          minNum=nums[0]
          for i in range(1,lenNum):
           end1,end2=maxNum*nums[i],minNum*nums[i]
            maxNum,minNum = max(end1,end2,nums[i]),min(end1,end2,nums[i])  
           ret = max(maxNum,ret)
          return ret



        衍生出相似的算法:

        1. 最小乘积子序列

        2. 最大和子序列

        3. ....





        欢迎长按下图关注公众号小璇坨坨

        十年积累倾囊相授





        文章转载自小璇坨坨,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论