题目描述
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
思路
方法来源于讨论区。这种方法实在是秒!!!时间复杂度
O
(
N
)
O(N)
O(N),神乎其技
在过程中,保存一个最大值和一个最小值,由于有负数,最大最小之间会变化。
class Solution {
public:
int maxProduct(vector<int>& nums) {
int biggest=INT_MIN, imax=1,imin=1;
for(int i=0;i<nums.size();++i)
{
if(nums[i]<0)//如果数组的数是负数,那么会导致最大的变最小的,最小的变最大的。因此交换两个的值。
{
int temp=imax;
imax=imin;
imin=temp;
}
imax=max(imax*nums[i],nums[i]);
imin=min(imin*nums[i],nums[i]);
biggest=max(imax,biggest);
}
return biggest;
}
};