LeetCode152. Maximum Product Subarray

题目链接:

https://leetcode.com/problems/maximum-product-subarray/

题目描述:

求最大连续子序列乘积。

For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.

题目分析:

还是动态规划的思想。维护局部最优和全局最优。

乘积的话要考虑特殊情况,两个负数相乘为正。如果前面是一个较小的负数,后面是个较大的负数,相乘的话乘积就是较大的正数。所以要维护两个局部最优,一个最大值,一个最小值。

maxLocal[i+1]=max(max(maxLocal[i]*nums[i],minLocal[i]*nums[i]),nums[i]);

minLocal[i+1]=min(min(maxLocal[i]*nums[i],minLocal[i]*nums[i]),nums[i]);

代码:

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int len=nums.size();
        if(len==0){
            return 0;
        }
        int maxCur=nums[0];
        int minCur=nums[0];
        int maxRes=maxCur;
        for(int i=1;i<len;i++){
            int tmp=maxCur;
            maxCur=max(max(maxCur*nums[i],minCur*nums[i]),nums[i]);
            minCur=min(min(minCur*nums[i],tmp*nums[i]),nums[i]);
            if(maxRes<maxCur){
                maxRes=maxCur;
            }
        }
        return maxRes;
    }
};

你可能感兴趣的:(LeetCode,动态规划)