给定一个整数数组 nums
,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
C++
class Solution {
public:
int maxProduct(vector<int>& nums)
{
int n=nums.size();
int temp=nums[0];
vector<int> M(n,0);
vector<int> m(n,0);
for(int i=0;i<n;i++)
{
if(i==0)
{
M[i]=nums[i];
m[i]=nums[i];
}
else
{
M[i]=max(max(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]);
m[i]=min(min(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]);
}
temp=max(temp,M[i]);
}
return temp;
}
};
python
class Solution:
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
temp=nums[0]
n=len(nums)
M=[0 for i in range(n)]
m=[0 for i in range(n)]
for i in range(0,n):
if i==0:
M[i]=nums[i]
m[i]=nums[i]
else:
M[i]=max(max(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i])
m[i]=min(min(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i])
temp=max(temp,M[i])
return temp