找出一个整数序列中乘积最大的连续子序列(至少包含一个数)。 样例
比如, 序列 [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;}
