这个是最大子序列乘积问题,之前有看过最大子序列和,那个比较简单,在我前面也有写过:
最大子序列和传送门:http://blog.youkuaiyun.com/alps1992/article/details/38072329
这个乘积其实和那个比较像,但是有个问题,就是可能出现负数相乘为正成为最大的数,所以需要维护的变量是两个,而不是一个了~
代码如下:
class Solution{
public:
int maxProduct(int A[], int n){
int max = A[0];
int min = A[0];
int maxProductNum = A[0];
int maxNum = A[0],minNum = A[0];
int i = 1;
for (i = 1; i < n; i++) {
max = Max(Max(maxNum*A[i], minNum*A[i]), A[i]);
min = Min(Min(maxNum*A[i], minNum*A[i]), A[i]);
maxProductNum = Max(max, maxProductNum);
maxNum = max;
minNum = min;
}
return maxProductNum;
}
int Max(int a, int b){
return a>b?a:b;
}
int Min(int a, int b){
return a<b?a:b;
}
};