1. 152

maximum-product-subarray


2. 算法

*DP:O(n)

http://www.cnblogs.com/yanliang12138/p/4634395.html

http://www.cnblogs.com/grandyang/p/4028713.html


3. 代码


http://www.cnblogs.com/grandyang/p/4028713.html

class Solution{

public:

    int maxProduct(vector<int>& nums){

        int n=nums.size();

        if(n==0) return 0;



        int maxIdx=1,minIdx=1;

        int out=nums[0];



        for(int i=0;i<n;i++){

            int oldMax=max(maxIdx,1);

            if(nums[i]>0){

                maxIdx=oldMax*nums[i];

                minIdx*=nums[i];

            }else{

                maxIdx=minIdx*nums[i];

                minIdx=oldMax*nums[i];

            }

            out=max(out,maxIdx);

        }

        return out;

    }

};

3.2 简洁写法


class Solution{

public:

    int maxProduct(vector<int>& nums){

        if(nums.empty())  return 0;

        int res=nums[0],mn=nums[0],mx=nums[0];

        for(int i=1;i<nums.size();++i){

            int tmax=mx,tmin=mn;

            mx=max(max(nums[i],tmax*nums[i]),tmin*nums[i]);

            mn=min(min(nums[i],tmax*nums[i]),tmin*nums[i]);

            res=max(res,mx);

        }



        return res;

    }

};

results matching ""

    No results matching ""