maximum product subarray

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.

int maxProduct(int A[], int n) {
int res = A[0];
int maxProduct = A[0];
int minProduct = A[0];
for(int i=1; i<n; i++){
if(A[i] >= 0){
maxProduct = max(maxProduct*A[i],A[i]);
minProduct = min(minProduct*A[i],A[i]);
}
else{
int temp = maxProduct;
maxProduct = max(minProduct*A[i],A[i]);
minProduct = min(temp*A[i],A[i]);
}
res = max(res,maxProduct);
}
return res;
}

//Approach 2:

int maxProduct(int A[], int n) {
int res = A[0];
int maxProduct = A[0];
int minProduct = A[0];
for(int i=1; i<n; i++){
int temp = maxProduct;
//A[i]<0,minProduct*A[i]可能最大
maxProduct = max(max(maxProduct*A[i],A[i]),minProduct*A[i]);
minProduct = min(min(temp*A[i],A[i]),minProduct*A[i]);
res = max(maxProduct,res);
}
return res;
}