乘积最大的子数组

func maxProduct(nums []int) int {
    if len(nums) == 0 {
        return 0
    }

    dpMax := make([]int, len(nums))
    dpMin := make([]int, len(nums))
    dpMax[0] = nums[0]
    dpMin[0] = nums[0]
    maxA := nums[0]
    for i := 1 ; i < len(nums); i++ {
        dpMax[i] = max(max(dpMax[i-1] * nums[i],dpMin[i-1] * nums[i]), nums[i])
        dpMin[i] = min(min(dpMax[i-1] * nums[i],dpMin[i-1] * nums[i]), nums[i])
        maxA = max(maxA, dpMax[i])
    }

    return maxA 
}



func max(x,y int ) int {
    if x > y {
        return x
    }
    return y 
}
func min(x,y int ) int {
    if x < y {
        return x
    }
    return y 
}

Last updated

Was this helpful?