找出一个整数序列中乘积最大的连续子序列(至少包含一个数)。 样例

    比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。

    分析:访问到每个点的时候,以该点为子序列的末尾的最大乘积,要么是该点本身,要么是该点乘以以前一点为末尾的最大乘积序列,注意乘积负负得正,故需要记录前面的最大最小值。

    1. public int maxProduct(int[] a){
    2. int max = Integer.MIN_VALUE, imax = 1, imin = 1;
    3. for(int i = 0; i < a.length; i++){
    4. if(a[i] < 0){
    5. int tmp = imax;
    6. imax = imin;
    7. imin = tmp;
    8. }
    9. imax = Math.max(imax * a[i], a[i]);
    10. imin = Math.min(imin * a[i], a[i]);
    11. max = Math.max(max, imax);
    12. }
    13. return max;
    14. }