[leetcode]Maximum Product Subarray最大子序列乘积

来源:互联网 发布:数字ip网络广播系统 编辑:程序博客网 时间:2024/05/17 22:54

题目是这样的:

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.


直接计算所有的可能性时间是O(n^2),会超时。这个问题看上去与最大子序列和一样,但是实现中发现,乘法还需考虑正数和负数两种情况,因为它们可以互相转换然后成为最大解。


class Solution {public:    int maxProduct(int A[], int n) {        if(n==1) return A[0];        int ptable[n], ntable[n];        memset(ptable, 0, sizeof(ptable));        memset(ntable, 0, sizeof(ntable));        //case i=0        if(A[0]>0) {            ptable[0]=A[0];        } else ntable[0]=A[0];                for(int i=1; i<n; i++) {            if(A[i]<0) {                if(ntable[i-1]==0) ptable[i]=0;                else ptable[i]=ntable[i-1]*A[i];                                if(ptable[i-1]==0) ntable[i]=A[i];                else ntable[i]=ptable[i-1]*A[i];            } else {                if(ntable[i-1]==0) ntable[i]=0;                 else ntable[i]=ntable[i-1]*A[i];                                if(ptable[i-1]==0) ptable[i]=A[i];                else ptable[i]=ptable[i-1]*A[i];            }        }                int max=A[0];        for(int i=0; i<n; i++) {            max=std::max(ptable[i],max);        }        return max;    }};


0 0
原创粉丝点击