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
}
京公网安备 11010502036488号