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
.
class Solution { public: int maxProduct(int A[], int n) { vector<int> pos(n, 0); vector<int> neg(n, 0); pos[0] = neg[0] = A[0]; int ans = A[0]; for(int i=1;i<n;i++){ if(A[i]>0){ pos[i] = pos[i-1] > 0 ? pos[i-1] * A[i] : A[i]; neg[i] = neg[i-1] <= 0 ? neg[i-1] * A[i] : A[i]; } if(A[i]<0){ pos[i] = neg[i-1] <= 0 ? neg[i-1] * A[i] : A[i]; neg[i] = pos[i-1] > 0 ? pos[i-1] * A[i] : A[i]; } if(pos[i] > ans) ans = pos[i]; } return ans; } };
原文:http://www.cnblogs.com/code-swan/p/4139560.html