go实现

最大、最小值为:
上一轮中最大值 乘以 当前值、上一轮中最小值 乘以 当前值、当前值
注意 oldMax 的用法,很重要

/**
 * 
 * @param arr double浮点型一维数组 
 * @return double浮点型
*/
func maxProduct(arr []float64 ) float64 {
    // write code here
    if len(arr) == 0 {
        return 0.0
    }

    max, min, res := arr[0], arr[0], arr[0]
    for i:=1; i< len(arr); i++{
        oldMax := max // 这里是关键!!!,不然 maxs中获取的max会覆盖 mins中需要的max

//      最大、最小值为:
//      上一轮中最大值*当前值、上一轮中最小值*当前值、当前值
//      注意 oldMax 的用法,很重要
        max = maxs(max*arr[i], min*arr[i], arr[i])
        min = mins(oldMax*arr[i], min*arr[i], arr[i])

        if max > res {
            res = max
        }
    }
    return res
}


func maxs(x,y,z float64)float64 {
    max := x
    if y > x {
        max = y
    }
    if z > max {
        max = z
    }
    return max
}

func mins(x,y,z float64)float64 {
    min := x
    if y < x {
        min = y
    }
    if z < min {
        min = z
    }
    return min
}