Fetch the repository succeeded.
package main
import (
"fmt"
"math"
)
// 152. 乘积最大子数组
func maxProduct(nums []int) int {
// 因为负数的存在使得有负负得正的情况,所以分别维护两个dp数组
n, res := len(nums), math.MinInt32
maxDp, minDp := make([]int, n+1, n+1), make([]int, n+1, n+1)
maxDp[0], minDp[0] = 1, 1
for i := 0 ; i < n ; i++ {
v := nums[i]
maxDp[i+1] = max(maxDp[i] * v , max(v , minDp[i] * v))
minDp[i+1] = min(minDp[i] * v , min(v , maxDp[i] * v))
res = max(res,maxDp[i+1])
}
return res
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
fmt.Println(maxProduct([]int{-2,0,-1}))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。