刷题152. Maximum Product Subarray

Posted siweihz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题152. Maximum Product Subarray相关的知识,希望对你有一定的参考价值。

一、题目说明

题目152. Maximum Product Subarray,给一列整数,求最大连续子序列,其乘积最大。难度是Medium!

二、我的解答

这个题目,用双重循环就可以了。

class Solution{
    public:
        int maxProduct(vector<int>& nums){
            if(nums.size()<=1) return nums[0];
            product = INT_MIN;
            int len = nums.size();
            
            for(int i=0;i<len;i++){
                int p = nums[i];
                if(p>product) product = p;
                for(int t=i+1;t<len;t++){
                    p *= nums[t];
                    if(p>product) product = p;
                }
            }
            return product;
        }
    private:
        int product;
};

性能如下:

Runtime: 200 ms, faster than 6.16% of C++ online submissions for Maximum Product Subarray.
Memory Usage: 9.1 MB, less than 82.50% of C++ online submissions for Maximum Product Subarray.

三、优化措施

仔细再读读题目,一列整数,上述方法太“通用”,一次循环就可以了。

class Solution{
    public:
        //dp,其中dp[i]表示以第i个元素结尾的最大乘积 
        int maxProduct(vector<int>& nums){
            if(nums.size()<=1) return nums[0];
            dpMax = nums[0];
            dpMin = nums[0];
            maxProd = nums[0];
            int len = nums.size();
            
            for(int i=1;i<len;i++){
                int preMax = dpMax;
                dpMax = max(dpMin*nums[i],max(nums[i],dpMax*nums[i]));
                dpMin = min(dpMin*nums[i],min(preMax*nums[i],nums[i]));
                cout<<"i="<<i<<",dpMax="<<dpMax<<",dpMin="<<dpMin<<"
"; 
                maxProd = max(dpMax,maxProd);
            }
            return maxProd;
        }
    private:
        int dpMax;
        int dpMin;
        int maxProd;
};
Runtime: 16 ms, faster than 9.45% of C++ online submissions for Maximum Product Subarray.
Memory Usage: 9.1 MB, less than 75.00% of C++ online submissions for Maximum Product Subarray.

以上是关于刷题152. Maximum Product Subarray的主要内容,如果未能解决你的问题,请参考以下文章

152. Maximum Product Subarray

152. Maximum Product Subarray(js)

152. Maximum Product Subarray

leetcode 152. Maximum Product Subarray

LeetCode 152. Maximum Product Subarray

152. Maximum Product Subarray