Maximum Product Subarray

来源:互联网 发布:上外翻译总公司 知乎 编辑:程序博客网 时间:2024/06/16 17:34

本题难点在于不但要动态规划最大值,还要动态规划最小值,因为最小值如果乘以一个负数,有可能变成最大值。

我没有意识到记录最小值这件事情,所以一直纠结在最大值上,后来用比较讨巧的brute-force的方法勉强AC通过(压缩连续的1为一个1),参考了unlock的solution,终于知道了要如何解决问题,代码如下:

class Solution {public:    int max(int a,int b,int c)    {        int res=a;        if(b>res)        {            res=b;        }        if(c>res)        {            res=c;        }        return res;    }    int min(int a,int b,int c)    {        int res=a;        if(b<res)        {            res=b;        }        if(c<res)        {            res=c;        }        return res;    }    int maxProduct(int A[], int n) {        if(n==0)        {            return 0;        }        if(n==1)        {            return A[0];        }        vector<int> maxdp(n,0);        vector<int> mindp(n,0);        maxdp[0]=A[0];        mindp[0]=A[0];        int res=A[0];        for(int i=1;i<n;++i)        {            maxdp[i]=max(A[i],maxdp[i-1]*A[i],mindp[i-1]*A[i]);            mindp[i]=min(A[i],maxdp[i-1]*A[i],mindp[i-1]*A[i]);            if(maxdp[i]>res)            {                res=maxdp[i];            }        }        return res;    }};


0 0
原创粉丝点击