152. 乘积最大子数组

暴力
func maxProduct1(nums []int) int {max :=math.MinInt64for i:=0;i<len(nums);i++{var res =1for j:=i;j<len(nums);j++{res =res*nums[j]if max<res{max =res}}}return max}

动态规划
需要实现了动态转移 一个是当前最大值 一个是最小值 ,因为数组存在负数 ,当两个负数相乘为整数
package mainimport ("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}))}

