乘积最大子数组
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
以上是关于乘积最大子数组的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode第152题—乘积最大子数组—Python实现