Leetcode 152每日一题:乘积最大子数组
Posted SuckChen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于Leetcode 152每日一题:乘积最大子数组的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 53 - I. 在排序数组中查找数字 I / 剑指 Offer 42. 连续子数组的最大和(线段树基础)/152. 乘积最大子数组 / 面试题 10.02. 变位词组