Leetcode152. 乘积最大子序列 C++

题目描述

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

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

思路

方法来源于讨论区。这种方法实在是秒!!!时间复杂度 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;
    }
};

猜你喜欢

转载自blog.csdn.net/yuanliang861/article/details/89227681
今日推荐