乘积最大子数组

Posted 我好困啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乘积最大子数组相关的知识,希望对你有一定的参考价值。

题目说明

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

示例:

输入: [2,3,-2,4]

输出: 6

解释:子数组 [2,3] 有最大乘积 6。

示例:

输入: [-2,0,-1]

输出: 0

解释:结果不能为 2, 因为 [-2,-1] 不是子数组。


解题思路

求解数组中乘积的最大值,此时对于乘法,由于存在正数和负数相乘,所有原来算好的最大值乘以负数将会变为最小值,所以需要维护两个变量,一个最大值,一个最小值,因为最大值说不定下一次乘以负数会变成最小值,最小值为负数时,乘以负数说不定会变为最大值。

代码实现
 1func maxProduct(nums []int) int {
2    if len(nums)==0 {
3        return 0
4    }
5    if len(nums)==1 {
6        return nums[0]
7    }
8    max:=nums[0]
9    min:=nums[0]
10    p:=nums[0]
11    for i:=1;i<len(nums);i++{
12        t:= max
13        //从最大值,最小值中选出乘当前num的最大值
14        max = Max(Max(max*nums[i],nums[i]),min*nums[i])
15        min = Min(Min(t*nums[i],nums[i]),min*nums[i])
16        p = Max(p,max)
17    }
18    return p
19}


注:其中Max和Min辅助函数自行实现。

复杂度分析

时间复杂度:O(n)
空间复杂度: O(1)

题目来源

leetcode


乘积最大子数组


乘积最大子数组 乘积最大子数组


乘积最大子数组







以上是关于乘积最大子数组的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--152乘积最大子数组

LeetCode第152题—乘积最大子数组—Python实现

LeetCode第152题—乘积最大子数组—Python实现

子数组问题--乘积最大

乘积最大子数组

LeetCode 152. 乘积最大子数组