152. Maximum Product Subarray

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

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

解题思路:当访问到a[i]时,乘积最大值的可能来源只能是之前的乘积最大值*a[i](a[i]>0,或者之前的乘积最小值*a[i](a[i]<0),或者当前值;

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int mmax=nums[0],mmin=nums[0],ans=nums[0],n=nums.size();
        for(int i=1;i<n;i++){
            int temp1=mmax*nums[i],temp2=mmin*nums[i];
            mmax=max(max(temp1,temp2),nums[i]);
            mmin=min(min(temp1,temp2),nums[i]);
            ans=max(mmax,ans);
        }
        return ans;
    }
};

 

posted @ 2017-02-20 22:17  Tsunami_lj  阅读(78)  评论(0编辑  收藏  举报