Maximum Product Subarray

Dynamic Programming

 

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.

 

C++实现代码:

#include<iostream>

using namespace std;



class Solution {

public:

    int maxProduct(int A[], int n) {

        if(n==0)

            return 0;

        int maxPro[n];

        int minPro[n];

        minPro[0]=maxPro[0]=A[0];

        int i;

        for(i=1;i<n;i++)

        {

            maxPro[i]=max(A[i],max(maxPro[i-1]*A[i],minPro[i-1]*A[i]));

            minPro[i]=min(A[i],min(maxPro[i-1]*A[i],minPro[i-1]*A[i]));

        }

        int max=maxPro[0];

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

        {

            if(max<maxPro[i])

                max=maxPro[i];

        }

        return max;

    }

};



int main()

{

    Solution s;

    int arr[10]={2,3,-2,4};

    cout<<s.maxProduct(arr,4)<<endl;

}

 改进:

int maxProduct(int A[], int n) {

        if(n==0)

            return 0;

        int maxPro;

        int minPro;

        minPro=maxPro=A[0];

        int Rmax=A[0];

        int i;

        for(i=1;i<n;i++)

        {

            int tmax=maxPro;

            int tmin=minPro;

            maxPro=max(A[i],max(tmax*A[i],tmin*A[i]));

            minPro=min(A[i],min(tmax*A[i],tmin*A[i]));

            Rmax=max(Rmax,maxPro);

        }

        return Rmax;

    }

 

你可能感兴趣的:(array)