码迷,mamicode.com
首页 > 编程语言 > 详细

Leetcode 152每日一题:乘积最大子数组

时间:2020-05-18 12:40:37      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:元素   bsp   solution   tco   return   最小值   for   数字   min   

中等难度题目

给你一个整数数组 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)

  

Leetcode 152每日一题:乘积最大子数组

标签:元素   bsp   solution   tco   return   最小值   for   数字   min   

原文地址:https://www.cnblogs.com/SuckChen/p/12909502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!