050_乘积最大子数组

知识点:乘法原理、动态规划

LeetCode第一百五十二题:https://leetcode-cn.com/problems/maximum-product-subarray/solution/

语言:GoLang

func maxProduct(nums []int) int {
    length := len(nums)

    if length == 0 {
        return 0
    }
    if length == 1 {
        return nums[0]
    }

    minDp := make([]int, length)
    maxDp := make([]int, length)
    minDp[0] = nums[0]
    maxDp[0] = nums[0]
    maxx := maxDp[0]
    for i := 1; i < length; i++ {
        maxDp[i] = max(nums[i], max(minDp[i - 1] * nums[i], maxDp[i - 1] * nums[i]))
        minDp[i] = min(nums[i], min(minDp[i - 1] * nums[i], maxDp[i - 1] * nums[i]))

        if maxDp[i] > maxx {
            maxx = maxDp[i]
        }
    }

    return maxx
}
posted @ 2020-04-08 20:22  Cenyol  阅读(88)  评论(0)    收藏  举报