source: http://blog.csdn.net/sbitswc/article/details/39546719
Analysis:
similar like Maximum Subarray question
difference is the max value could be get from 3 situations
current maxValue * A[i] if A[i]>0
current minValue * A[i] if A[i]<0
A[i]
We need to record current maxValue, current minValue and update them every time get the new product
class Solution {
public:
int maxProduct(int A[], int n)
{
if(n <= 0) return 0;
if(n == 1) return A[0];
int curMin = A[0];
int curMax = A[0];
int ans = A[0];
for(int i=1; i<n; i++)
{
int temp1 = A[i] * curMin;
int temp2 = A[i] * curMax;
curMin = min(A[i], min(temp1, temp2));
curMax = max(A[i], max(temp1, temp2));
ans = max(curMax, ans);
}
return ans;
}
};