题解 | #子数组最大乘积# go实现

子数组最大乘积

http://www.nowcoder.com/practice/9c158345c867466293fc413cff570356

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
}
全部评论

相关推荐

01-15 13:52
已编辑
河南大学 Java
六年要多久:标准头像,不吃香菜😂
点赞 评论 收藏
分享
只写bug的程序媛:才15,我招行20多万,建设银行50多万,说放弃就放弃
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务