参考自http://blog.csdn.net/salutlu/article/details/39560795
1、题目
2、分析
设乘积中包含A[i-1]的最大值、最小值分别为curMin, curMax;则乘积中包含A[i]的最大值、最小值必在:{A[i], curMin*A[i], curMin*A[i]}中。取curMin是考虑到俩个绝对值较大的负数相乘会得到较大的积。
3、代码
class Solution {
public:
int maxProduct(int A[], int n) {
if(n == 0)
return 0;
int curMin = A[0];
int curMax = A[0];
int ans = A[0];
for(int i=1; i< n;i++){
int temp = curMin * A[i];
curMin = min(A[i],min(temp,curMax*A[i]));
curMax = max(A[i],max(temp,curMax*A[i]));
ans =max(curMax,ans);
}
return ans;
}
};