题目:
给定一个double类型的数组arr,其中的元素可正、可负、可0,返回子数组累乘的最大乘积。例如,arr=[-2.5, 4, 0, 3, 0.5, 8, -1],子数组[3, 0.5, 8]累乘可以获得最大的乘积12,所以返回12。
package main
import (
"fmt"
)
func Max(x, y float32) float32 {
if x > y {
return x
}
return y
}
func Min(x, y float32) float32 {
if x < y {
return x
}
return y
}
func maxProduct(arr []float32) float32 {
if len(arr) == 0 {
return 0
}
var max float32 = arr[0]
var min float32 = arr[0]
var res float32 = arr[0]
var maxEnd float32 = 0
var minEnd float32 = 0
for i := 1; i < len(arr); i++ {
maxEnd = max * arr[i]
minEnd = min * arr[i]
max = Max(Max(maxEnd, minEnd), arr[i])
min = Min(Min(maxEnd, minEnd), arr[i])
res = Max(res, max)
}
return res
}
func main() {
arr := [...]float32{-2.5, 4, 0, 3, 0.5, 8, -1}
value := maxProduct(arr[:])
fmt.Println("max value is: ", value)
}