152. 乘积最大子数组
暴力
func maxProduct1(nums []int) int {
max :=math.MinInt64
for i:=0;i<len(nums);i++{
var res =1
for j:=i;j<len(nums);j++{
res =res*nums[j]
if max<res{
max =res
}
}
}
return max
}
动态规划
需要实现了动态转移 一个是当前最大值 一个是最小值 ,因为数组存在负数 ,当两个负数相乘为整数
package main
import (
"fmt"
"sort"
)
// 三个数字排列 获取最大值和最小值
func search(a,b,c int)(big,small int){
i :=[]int{a,b,c}
sort.Ints(i)
return i[2],i[0]
}
func maxProduct(nums []int) int {
dpMax :=make([]int,len(nums))
dpMin:= make([]int,len(nums))
dpMax[0] =nums[0]
dpMin[0] = nums[0]
max :=nums[0]
for i:=1;i<len(nums);i++{
dpMax[i],dpMin[i] = search(dpMax[i-1]*nums[i],dpMin[i-1]*nums[i],nums[i])
if dpMax[i]>max {
max = dpMax[i]
}
}
return max
}
func main() {
fmt.Println(maxProduct([]int{-2,0,-1}))
fmt.Println(maxProduct([]int{2,3,-2,4}))
fmt.Println(maxProduct([]int{-2,3,-4}))
}