找出一个整数序列中乘积最大的连续子序列(至少包含一个数)。 样例
比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。
分析:访问到每个点的时候,以该点为子序列的末尾的最大乘积,要么是该点本身,要么是该点乘以以前一点为末尾的最大乘积序列,注意乘积负负得正,故需要记录前面的最大最小值。
public int maxProduct(int[] a){
int max = Integer.MIN_VALUE, imax = 1, imin = 1;
for(int i = 0; i < a.length; i++){
if(a[i] < 0){
int tmp = imax;
imax = imin;
imin = tmp;
}
imax = Math.max(imax * a[i], a[i]);
imin = Math.min(imin * a[i], a[i]);
max = Math.max(max, imax);
}
return max;
}