码迷,mamicode.com
首页 > 其他好文 > 详细

152 Maximum Product Subarray 乘积最大子序列

时间:2018-04-06 17:38:52      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:复杂   min   amp   imu   problems   return   rod   方法   post   

找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
例如, 给定序列 [2,3,-2,4],
其中乘积最大的子序列为 [2,3] 其乘积为 6。
详见:https://leetcode.com/problems/maximum-product-subarray/description/

方法一:

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int size=nums.size();
        if(size==0||nums.empty())
        {
            return 0;
        }
        vector<int> f(size,0),g(size,0);
        int res=nums[0];
        f[0]=nums[0];
        g[0]=nums[0];
        for(int i=1;i<size;++i)
        {
            f[i]=max(nums[i],max(nums[i]*f[i-1],nums[i]*g[i-1]));
            g[i]=min(nums[i],min(nums[i]*g[i-1],nums[i]*f[i-1]));
            res=max(res,f[i]);
        }
        return res;
    }
};

 方法二:优化空间复杂度

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int size=nums.size();
        if(size==0||nums.empty())
        {
            return 0;
        }
        int mx=nums[0];
        int mn=nums[0];
        int res=nums[0];
        for(int i=1;i<size;++i)
        {
            int tmax=mx,tmin=mn;
            mx=max(nums[i],max(tmax*nums[i],tmin*nums[i]));
            mn=min(nums[i],min(tmax*nums[i],tmin*nums[i]));
            res=max(res,mx);
        }
        return res;
    }
};

 参考:https://www.cnblogs.com/grandyang/p/4028713.html

152 Maximum Product Subarray 乘积最大子序列

标签:复杂   min   amp   imu   problems   return   rod   方法   post   

原文地址:https://www.cnblogs.com/xidian2014/p/8728145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!