zoukankan      html  css  js  c++  java
  • Leetcode 152每日一题:乘积最大子数组

    中等难度题目

    给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

    输入: [2,3,-2,4]
    输出: 6
    解释: 子数组 [2,3] 有最大乘积 6。

    思路:max2 记录每一个元素为截止的子数组乘积的最大最小,
    (1)当前数 a[i]为正,则最大值为 i-1 结尾的最大值max2[i-1]*a[i] or a[i]
    (2)a[i]为负,以a[i]为结尾的子数组,最大值为 i-1 结尾的最小值min2[i-1]*a[i] or a[i]
    (3)a[i]为0,i结尾的乘积最大最小都为0

     可以优化不用两个list存放max和min

    tclass Solution:
        def maxProduct(self, nums: List[int]) -> int:
            if len(nums)==0:
                return 0 
            max2 =  [nums[0]]
            min2 = [nums[0]]
            for i in range(1,len(nums)):
                if nums[i]>0:
    
                    max1 = max(max2[i-1]*nums[i],nums[i])
                    min1 = min(min2[i-1]*nums[i],nums[i])
                elif nums[i]<0:
                    max1  =max(min2[i-1]*nums[i],nums[i])
                    min1 = min(max2[i-1]*nums[i],nums[i])
               
                elif nums[i]==0:
                    max1 = 0
                    min1 = 0
                max2.append(max1)
                min2.append(min1)
            return max(max2)
    

      

  • 相关阅读:
    java简单实现MD5加密
    Java用freemarker导出Word 文档
    java 反射(*)
    java解析XML
    JDBC程序实例
    web前端开发-博客目录
    虚拟主机配置
    WAMP运行原理
    WAMP配置
    web前端性能优化总结
  • 原文地址:https://www.cnblogs.com/SuckChen/p/12909502.html
Copyright © 2011-2022 走看看